一、constexpr 变量
首先先了解一个概念:常量表达式
常量表达式:是值不会改变并且在编译过程就能得到计算结果的表达式
所以,换个角度想,字面值是属于常量表达式的
那什么是字面值呢?
很简单,比如 1, 2,3,4, "123", '1', nullptr 等等
所以,一个对象或者表达式是不是常量表达式是由它的数据类型和初始值共同决定的
例如:
const int A = 20; // A 是常量表达式
const int B = A + 1; // B 是常量表达式
int C = 27; // C 不是常量表达式,因为非 const
const int D = size(); // D 不是常量表达式,因为不是在编译期间获取到结果
在实际使用中,我想定义一个常量表达式
例如上边例子的 A 一样,但实际中,我们可能会像声明 D 一样的做法
当项目很复杂的时候,我们就分辨不出来一个初始值到底是不是我们认定的常量表达式
当然也有保险的方法
就是声明一个 const 变量来作为初始化
设定为我们认定的常量表达式
但这情况显得麻烦且不严谨了
为此
C++11 推出了 constexpr 变量
允许变量声明为