constexpr
constexpr
的作用, 或者说, 常量的作用, 就是 效率
因为, 他 从 (运行期) 搬到了 (编译期), 不占 运行期了, 自然效率高了
与const的区别
首先, 讲一下const
的英文意思: 常量, 不变
const expression
的意思, 其实他和const
没有太多的关系;
const
的唯一意思是: 只读, 其实, 他在c++里的作用, 和他本身英文意思, 并不匹配;
所谓 只读:
比如, 有一个Foo foo
对象, 外界用户得到了一个 (const的引用/指针),
那么, 此时这个const
的作用是: 外界用户, 只可以 读 这个对象, 并不能 修改这个对象;
但是, 我们知道, 这个foo
对象, 他是可以(被修改的); 比如, 他自己可以修改自己, 或者, 一个非const
的指针, 也可以修改
所以, const
的意思, 不是说: 这个(内存)不可以修改, 而是: 这个内存, 对于 (外界用户) 是 只读的
而constexpr
, 是真正的 (常量), 他这个内存, 就是不可以修改的; 他是Literal类型, 是在编译期的
const 和 constexpr
的区别, 类似于: const QString
和 QStringLiteral
的区别!!!
你理解QStringLiteral
, 就理解 constexpr
了;
比如, 有一个函数func
, 他会被调用很多次, 他里面有一个 值double
, 是一个常量
我们的想法是:
const double Pi = 3.14;
但这样不好的, 因为, 每次调用这个函数, 都会申请 和 释放
这个对象static const double Pi =