1、常量表达式是指值不会改变,并且在编译过程中就能得到计算结果的表达式。
2、把变量定义成constexpr的,可以让编译器来验证它是否是常量表达式,如果初始化使用了非常量表达式,那么编译器会报错。
3、声明为constexpr的变量一定是一个常量,而且必须用常量表达式来初始化。
4、尽管不能用普通函数来作为constexpr变量的初始值,但是新标准允许定义一种特殊的constexpr函数,这种函数应该足够简单以使得编译时就可以计算其结果,这样就能用cosntexpr函数去初始化constexpr变量了。
5、一般来说,如果你认定变量是常量表达式,那就把它声明成constexpr类型。
6、尽管指针和引用都能定义成cosntexpr,但是它们的初始值却受到严格限制。一个constexpr指针的初始值只能是nullptr或0,或者是存储于某个固定地址中的对象。
7、函数体内定义的变量一般来说并非存放在固定地址中,定义于所有函数体外的对象其地址固定不变。允许函数定义一类作用范围超出函数本身的变量,这类变量也存放在固定地址中。
8、constexpr定义的指针为常量指针,这种情况下从右往左读取定义语句含义的方法不适用。const int *p和constexpr int *p是两回事,前者为指向常量的指针,后者为常量指针,另外cosntexpr const int *p为指向常量的常量指针。
9、在遇到类型别名是指针或者引用时,类型别名部分要作为一个整体,而不能简单的在声明语句中展开,例如,typedef char *pstring;cosnt pstring cstr;此时由于pstring是char型指针,所以const pstring定义的变量是常量指针,而并不能简单展开再用从右往左的方式解读。
标签:变量,常量,constexpr,指针,表达式,定义 From: https://www.cnblogs.com/Gregg/p/16937713.html