1.基本用法:
constexpr是指值不会改变而且在编译过程就能得到计算结果的表达式。
一个表达式是不是常量表达式由它的数据类型和初始值共同决定,例如:
//max_files、limit 都是常量表达式,而staff_size、sz不是
const int max_files = 20;
const int limit = max_files + 1;
int staff_size = 27;
const int sz = get_size();
(上述摘录自《c++ primer》)
平时我们总是要用到字面值常量,但是如何知道刚刚开始定义的这个值是不是字面值常量,就是靠constexpr来判断,例如:
constexpr int num = 20; //常数20,所以num是字面值常量
constexpr int num2 = num + 1; //由字面值常量num定义,所以num2也是
constexpr int num3 = getnum(); //getnum函数需要是一个constexpr函数
第三个还需要getnum函数在编译时就得到计算并返回字面值常量,否则会编译错误;
2.其他注意点:
constexpr只对指针有效,对指针所指的对象无关!
所以
constexpr int *p = nullptr; //指向整型的常量指针,p不可变
const int *q = nullptr; //指向整型常量的指针,*q不可变
因为constexpr把它所定义的对象置为顶层const
另外!int * constexpr q是错误的,constexpr不可怎么用。