constexpr和const对比

const的功能

  1. 修饰变量。修饰变量为常量 const int a= 4。
  2. 修饰普通函数。修饰函数的入参和返回参数为只读。
  3. 修饰类成员函数。表面类的成员函数隐含const this指针,不会修改类的数据成员。

constexpr出现的意义

在c++11出现以前,const关键字承载了太多的含义,最主要的两个作用是修饰变量只读和修饰变量是常量。从c++11开始,引入了constexpr关键字用来专属修饰表达式是编译期常量表达式,用于和const的运行时常量做区分。

constexpr的功能

修饰变量

定义常量,且仅修饰顶层const语义

1)constexpr int b = 1;//使用字面值初始化常量b

2)constexpr char* p ="hello";

      p="world";//error 不可更改p的指向,等价char * const p="hello"

3)constexpr char const *p ="hello";//使用const显示修饰底层const

修饰类的static成员变量,包含inline语义

class A

{

     public:

               static constexpr int num_ ;

                static const int num1_;

};

使用const修饰的static变量,默认没有inline属性,需要在类外进行定义。

使用constexpr修饰的static变量则不需要类外定义。

修饰函数

       被constexpr修饰的函数表明向编译器告知,此函数在某些入参时可在编译期间得到结果,请按照那样来优化我。

注意,只是可能,编译器无法通用的检查是否满足要求,不满足时退化成普通函数使用。

constexpr int test(int test)

{

return test+5;

}

constexpr int ret = test(1);//此处必须使用字面值入参,否则会退化成普通函数,导致ret处因返回非常量而编译失败

constexpr限定规则

  1. constexpr变量必须定义时就用常量表达式/字面量初始化
  2. constexpr函数内部不许调用任何非constexpr函数
  3. 其他复杂规则详见扩展资料

扩展资料

const

https://blog.csdn.net/Eric_Jo/article/details/4138548

constexpr

https://zh.cppreference.com/w/cpp/language/constexpr

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值