48.聊一聊constexpr变量

常量表达式,是指值不会变并且在编译的时候就已经能够计算出结果的表达式。

字面值属于常量表达式,用常量表达式初始化的const变量也是常量表达式。

一个对象是或不是常量表达式,要根据他的数据类型初始值共同决定!

int a = 42;
const int b = size();

上面的a和b都不是常量表达式!不过b要想是常量表达式的话只要满足size()是constexpr函数就行! 

constexpr变量

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

constexpr int a = 20;
const int limit = a+2;

 constexpr只对指针有效,也即是说,constexpr声明的指针是指针的顶层const。也就是说,指针是常量指针,那究竟它所指向的值是否是常量那就不确定了!constexpr指针是常量指针,不能指向定义在函数体内的变量!因为这些变量一般来说并非存在固定地址中

int a = 42;
constexpr int* op = &a;

a是普通变量,值为42,op是常量指针,op指向a;


constexpr int b = 32;
constexpr int* ok = b;

b是常量表达式,值为32,ok是常量指针,指向常量b;


constexpr函数

函数的返回值和参数类型都必须是字面值类型(指针,引用,算术类型)

函数体中必须只能有一条return语句;

constexpr int size_ss() {return 42;}

constexpr int a = size_ss(); //正确

隐式被声明为内联函数。可以多次定义,为了保持多个定义的完全一致!所以定义在头文件中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值