常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式。
指针和 constexpr
必须明确一点,在 constexpr 声明中如果定义了一个指针,限定符constexpr 仅对指针有效,与指针所指的对象无关:
const int *p=nullptr; // P是一个指向整型常量的指针
constexpr int *q=nullptr; // q是一个指向整数的常量指针
p和q的类型相差甚远,p是一个指向常量的指针,而q是一个常量指针,其中的关键在于 constexpr 把它所定义的对象置为了顶层 const(参见 2.4.3 节,第 57 页)。
与其他常量指针类似,constexpr 指针既可以指向常量也可以指向一个非常量:
constexpr int *np=nullptr; //np是一个指向整数的常量指针,其值为空
int j=0;
constexpr int i=42; //i的类型是整型常量
//i和j都必须定义在函数体之外
constexpr const int *p=&i; //p是常量指针,指向整型常量i
constexpr int *p1= &j; //P1是常量指针,指向整数j
constexpr 函数
可查看 《C++ Primer》 P214,类似 inline 函数。貌似声明和定义都需要constexpr
关键字。
摘自:《C++ Primer》 P60