关键字 constexpr 是C++11中引入的关键字,是指值不会改变并且在编译过程中就得到计算结果的表达式。(运行中得到结果的不能成为常量表达式,比如变量)。

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

constexpr int i=;
constexpr int j=i+;
constexpr int k=f(); //只有f()是一个constexpr函数时k才是一个常量表达式

一般来说,若果一旦认定变量是一个常量表达式,那就把它声明为constexpr类型

常量表达式机制是为了:

1、提供了更多的通用的值不发生变化的表达式
2、允许用户自定义的类型成为常量表达式
3、提供了一种保证在编译期完成初始化的方法(可以在编译时期执行某些函数调用)

语义上:
constexpr:告诉编译器我可以是编译期间可知的,尽情的优化我吧。
const:告诉程序员没人动得了我,放心的把我传出去;或者放心的把变量交给我,我啥也不动就瞅瞅。

语法上:
constexpr是一种比const 更严格的束缚, 它修饰的表达式本身在编译期间可知, 并且编译器会尽可能的
evaluate at compile time. 在constexpr 出现之前, 可以在编译期初始化的const都是implicit
constexpr. 直到c++ 11, constexpr才从const中细分出来成为一个关键字, 而 const从1983年 c++
刚改名的时候就存在了

csdn论坛上看见大神的一段短话,摘录下来,很值的体会

constexpr:不光是可以取代模板是某些常量的表达更简洁,其实一个决定性的作用是支持地址类常量。这恰好补上了模板缺失的部分。比如有一个字符串常量"abc",很自然的可以认为其中的元素也是常量地址,对一个有编译期内容的常量地址取值理论上可以在编译器确定结果,但实际上按旧语法却不能直接拿去做为常量使用而是当作变量。

最新文章

  1. websevice中runtime modeler error: Wrapper class com.ws.jaxws.Add is not found问题的解决办法
  2. MyEclipse常用插件使用教程
  3. java 关于多线程高并发方面
  4. 2016 - 1 - 23 xml解析 -- 语法简介
  5. php xdebug xampp eclipse
  6. PHP 中的数组
  7. Hadoop学习之编译eclipse插件
  8. 记一次-angular-数字格式化
  9. Codeforces #377 Div2
  10. MongoDB的CURD命令
  11. 动态sql与静态sql的区别
  12. 介绍一个比较了各种浏览器对于HTML5 等标准支持程度的网站
  13. #004 C语言大作业学生管理系统试着做
  14. [tool] google搜索的正确使用姿势(待补全)
  15. protobuf使用简介
  16. BonnMotion支持的几种移动模型
  17. 恢复Intellij idea删除的文件
  18. 创建型模式之Builder(建造者)模式
  19. 五:理解控件的运行机制(例:基于Control命名空间的简单控件)
  20. MBR:主引导记录:

热门文章

  1. Oracle Data Integrator 12c----一致性 CDC(Consistent CDC)
  2. yii框架的部署方法
  3. cpu高 load 高 内存高 io 高怎么排查
  4. 【树莓派+.NET MF打造视频监控智能车】控制篇(树莓派)
  5. python之模块pprint之常见用法
  6. C# 向指定的进程发送消息
  7. SG 函数初步 HDU 1536 && HDU 1944
  8. [转] 利用BLKTRACE分析IO性能
  9. SSD 为什么顺序写比随机写性能更好?
  10. [转]awesome-tensorflow-chinese