constexpr变量

constexpr和常量表达式

常量表达式是指不会改变并且在编译过程中就能够得到计算结果的表达式。

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

声明的为constexpr的变量一定是一个常量,而且必须用常量表达式初始化

const int a=20;               //a是常量表达式 
const int b=a+20;               //b是常量表达式
int c=20;               //c不是常量表达式;数据类型不是const int
const int d=getsize();          //d不是常量表达式; 具体值只能运行时才能获取,不是常量表达式

constexpr变量

C++11新规定,允许将变量声明为constexpr类型,以便由编译器来验证变量值是否是一个常量表达式。
(目前还不知道有什么用,感觉就是为了在编译阶段就识别函数返回是否是常量)

唯一的作用可能就是可以判断一个函数是否是常量表达式,从而用于初始化常量

常量表达式函数需要满足几个条件,否则不能用constexpr关键字进行修饰:

  • 函数只能包含return语句。
  • 函数必须有返回值。
  • 在使用前必须已经定义。
  • return返回语句中不能使用非常量表达式的函数、全局数据,且必须是一个常量表达式。

constexpr int number1(){ return 5; }      //正确
constexpr int number2(){ int a; return 5; }      //错误,不能有其他表达式
constexpr int number3(){ return ; }      //错误,无返回值
int a = 10; constexpr int number4(){ return a; }       //错误,a不是常量

字面值类型

常量表达式的值需要在编译时就得到计算,因此对声明constexpr时用到的类型必须有所限制。因为这些类型一般比较简单,值也显而易见、容易得到,就把它们称为“字面值类型”

指针和constexptr

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

p是一个指向常量的指针,而q是一个常量指针。

原因是因为constexpr把他所定义的对象置为了顶层const(类似于*const q)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大学生毕设

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值