常量表达式

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定义的变量是常量指针,而并不能简单展开再用从右往左的方式解读。

posted @ 2022-11-30 14:43  许卡文迪  阅读(449)  评论(0编辑  收藏  举报