c++基础:新标准constexpr基本用法及其他注意点

1.基本用法:

constexpr是指值不会改变而且在编译过程就能得到计算结果的表达式。
一个表达式是不是常量表达式由它的数据类型和初始值共同决定,例如:

//max_files、limit 都是常量表达式,而staff_size、sz不是
const int max_files = 20;
const int limit = max_files + 1;
int staff_size = 27;
const int sz = get_size();

(上述摘录自《c++ primer》)

平时我们总是要用到字面值常量,但是如何知道刚刚开始定义的这个值是不是字面值常量,就是靠constexpr来判断,例如:

constexpr int num = 20//常数20,所以num是字面值常量
constexpr int num2 = num + 1//由字面值常量num定义,所以num2也是
constexpr int num3 = getnum();      //getnum函数需要是一个constexpr函数

第三个还需要getnum函数在编译时就得到计算并返回字面值常量,否则会编译错误;

2.其他注意点:
constexpr只对指针有效,对指针所指的对象无关!
所以

constexpr int *p = nullptr;     //指向整型的常量指针,p不可变
const int *q = nullptr;     //指向整型常量的指针,*q不可变

因为constexpr把它所定义的对象置为顶层const

另外!int * constexpr q是错误的,constexpr不可怎么用。

你可能感兴趣的:(c++)