constexpr和常量表达式的注意事项

时间:2021-07-10 12:22:00

1、常量表达式,是指其值不可改变,且在编译阶段就已经得出计算结果的表达式,例如字面值就是常量表达式。

2、判断是否是常量表达式,要关注数据类型是否是const类型,初始值是否是在编译阶段就得到的。

3、C++11新标准,允许用constexpr类型去声明变量,让编译器去判断是否是常量表达式,必须用常量进行初始化,并且与该类型协同的还有一个constexpr函数,以后补充。

4、声明constexpr的类型必须是字面值类型。

5、定义成constexpr的指针和引用的初始值有限制,指针的初始值只能是nullptr、0或者存储于某一个固定地址的对象,故函数体内的变量一般不能被其指向。

6、若函数体内定义的对象有效范围超过函数本身,那么其也是具有固定地址的,也能被constexpr指针所指向或者引用所绑定。

7、constexpr声明的指针,仅对指针有效,与其所指的内容无关,也就是说,限定符constexpr会将其定义的对象变成顶层const。

8、constexpr const int *p=&i;  //指向常量的指针常量。  constexpr int *p1=&j;  //指向一个整型变量的指针常量