常量表达式和constexpr

什么是常量表达式:

常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。

一个对象(或表达式)是不是常量表达式由它的数据类型和初始值共同决定,例如:

const int a=20; //a是常量表达式
const int b=a+1;//b是常量表达式
int c=2; //c不是常量表达式,因为数据类型是普通int
const int d= get_size();//d不是常量表达式,因为get_size()的值要到运行才知道

constexpr变量:

由于复杂环境下,难以分辨是不是常量表达式。c++11新标准允许将变量声明为constexpr类型一便于编译器验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个变量,必须用常量表达式初始化。

相应地,有constexpr函数可以初始化constexpr变量。声明constexpr时用到的类型就称为字面值类型。

自定义类,io库,string都不属于这类,算术类型和指针、引用属于。

指针与constexpr

constexpr指针的初始值必须是nullptr或者0,或者是存储于某个固定地址中的对象。

假如在constexpr声明中定义了一个指针,限定符只对指针有效,所指的对象无关。

const int *p = nullptr; //p是一个指向整形常量的指针
constexpr int *q = nullptr; //q是一个指向整数的常量指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值