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不可怎么用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值