常量表达式——常量表达式指的是值不会改变,并且计算结果在编译过程就能得出的表达式。
C++11新增的constexpr就是为直接检测某一表达式是否是常量表达式而存在,使用constexpr声明的变量后,编译器会自动检测表达式。
字面值类型如算术类型、引用类型和指针类型都能定义成常量表达式。
这里需要强调的是,虽然指针和引用都能够声明为常量表达式,但是他们受到了严格的限制。指针在定义为常量表达式时,其初值必须是0,nullptr或者是存储与固定地址中的对象。constexpr指针等价于常量指针,也就是说,它只限定了声明指针本身,与所指对象无关。例如:constexpr int* a = nullptr 等价于 int* const a = nullptr; ,可以理解的是既然表达式的值在编译过程中就能确定,那么他的初值赋值对象也必须是在编译过程中就确定的。具体来说,一般在函数体内部的变量其地址都是不固定的,而函数体外部则固定,所以函数外部的变量通常可以用来初始化constexpr指针,而内部变量则不行。
标签:变量,nullptr,constexpr,指针,表达式,常量 From: https://www.cnblogs.com/meetalone/p/17119134.html