constexpr关键字

constexpr

  • c++中为了完善语言体系,与预处理常量、运行时常量区分开,c++引入了一个新的关键字,“constexpr”用来实现真正的编译期常量。
  • constexpr这个关键字可以从字面意义上理解为常量表达式,它是一个特殊的类型修饰符:任何表达式、函数只要带上它就会具有编译期常量的特性,能够用于编译期计算,例如:
constexpr int MAX = 100;//编译期常量整数
constexpr long mega_bits(){ //编译期常量函数
return 1024*1024;
}
  • 当然了,因为编译期计算的特殊性,constexpr也无法让所有的变量、函数都在编译期可用,其用起来也有很多的限制。
    对于表达式,基本的要求不能含有运行时语法元素,不能是string/vector等需要运行时动态分配的复杂类型,通常只能是整数,字符串等字面量,而array因为能够在编译期确定长度,是可以应用constexpr的:
constexpr auto val = 100; //编译期整数常量
constexpr auto str = "hello"; //编译期字符串常量
constexpr array<int, 3> arr {1,2,3}; //编译期数组常量
constexpr vector<int> vec; //编译错误
constexpr string s = "str";//编译错误
constexpr map<int,int> m; //编译错误
  • 当用constexpr修饰函数的时候,限制就更多了,例如不能用try-catch,不能是虚函数,不能动态分配内存…原则是只要不涉及复杂的运行时特性,就可以在编译期执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值