constexpr---常量表达式 ,是指值不会改变并且在编译过程就能得到计算结果的表达式。
C++11新标准规定,可以把变量声明为constexpr类型,该类型的变量将由编译器来验证它的值是否是一个常量表达式。故而,声明为constexpr的变量,一定是一个常量且必须用常量表达式初始化。下面是使用constexpr的注意事项
1:因为常量表达式在编译时就得到计算,故能声明为constexpr的类型必须是字面值类型,如算术类型,指针和引用;自定义类则不属于字面值类型。
2:对于声明为constexpr类型的指针,初始值必须为0或null,或这是某个固定地址;引用也类似
3:限定符constexpr只对指针有效,与其所指对象无关:constexpr int *q = nullptr;//q是一个指向整数的常量指针
4:可以用constexpr 函数 初始化constexpr变量,constexpr函数的声明定义方式如下:
constexpr int test () { return 1 ;}; constexpr int i = test ();
注意: 1,constexpr函数被隐式地指定为内联函数,在执行初始化时,编译器把对constexpr函数的调用替换成其结果值
2 ,constexpr函数可以返回非常量,所以, 如果 constexpr 包含参数,当该参数为非常量表达式时,其返回值也不是一个常量,例如
constexpr test ( int i ){ return i ; } ; int j = 2;
constexpr int k = test(j);//该 语句错误,返回值为非常量表达式