您的位置:首页 > 编程语言 > C语言/C++

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

2017-03-14 22:41 281 查看
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++