constexpr变量必须使用一个具有const属性,且在编译阶段就已知的值对其初始化。例如:
int x = 0;
const int y = x; //可以使用x对cosnt变量初始化
const int z = 0;
constexpr int arraySize = x; //错误,x为运行期间才确定值的变量
constexpr int arraySize = y; //错误,y为运行期间才确定值的变量
constexpr int arraySize = z; //正确,z为const变量,且编译期间就已知
constexpr int arraySize = 11; //正确,11为const变量,且编译期间就已知
对于constexpr函数,在调用时,将根据传入参数的型别,有不同的结果:
- 如果传入的参数都是constexpr变量,则函数返回值也是constexpr变量
- 如果传入的参数有一个或多个不是constexpr变量,则其和普通函数无差别
要点速记
- constexpr变量具备const属性,且必须由编译器已知的值完成初始化。
- constexpr函数在调用时,若传入的实参值都是编译期已知的,则返回的结果也是constexpr变量,否则返回非constexpr变量
- 比起非constexpr变量或constexpr函数而言,constexpr函数或constexpr变量可以用在一个作用域更广的语境中