C++11新标准constexpr关键字
来源:互联网 发布:sql where and 编辑:程序博客网 时间:2024/06/06 00:21
constexpr是C++11新标准规定的规定的关键字。有时我们很难分辨一个初始值是不是常量表达式,当然可以定义一个
const变量并把它的初始值设为我们认为的某个常量表达式,但在实际使用时,尽管要求如此却常常发现初始值并非常量 表达式的情况。可以说,这时的对象的定义与使用根本就是两回事。
C++11新标准规定,允许将变量声明为constexpr类型让编译器来验证变量的值是否是一个常量表达式。
声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化:
constexpr int mf = 0; // 0 是常量表达式
constexpr int limit = mf + 1; // mf + 1 是常量表达式
constexpr int sz = size(); // 只有当 size() 是一个constexpr函数时才是一条正确的声明语句
constexpr函数要求所定义的函数足够简单以使得编译时就可以计算其结果
constexpr int Dec(int i){ return i-1; }
constexpr还能修饰类的构造函数,即保证传递给该构造函数的所有参数都是constexpr,那么产生的对象的所有成员都是constexpr, 该对象也是constexpr对象了,可用于只使用constexpr的场合。
**注意**constexpr构造函数的函数体必须为空,所有成员变量的初始化都放到初始化列表中。
class Test { public: constexpr Test(int arg1, int arg2) : v1(arg1), v2(arg2) {} private: int v1; int v2; }constexpr Test A(1,2)enum e = {x = A.v1, y = A.v2};
使用constexpr的好处
- 是一种很强的约束,更好的保证程序的正确定语义不被破坏;
- 编译器可以对constexper代码进行非常大的优化,例如:将用到的constexpr表达式直接替换成结果;
- 相比宏来说没有额外的开销。
阅读全文
1 0
- C++11新标准constexpr关键字
- C++11新标准之五:constexpr
- constexpr关键字
- constexpr关键字
- constexpr关键字
- constexpr关键字
- [c++]c++11 新标准
- c++11的constexpr关键字 literal(常量)
- C++中的constexpr关键字
- c++基础:新标准constexpr基本用法及其他注意点
- c 语言新标准
- C语言新标准C11
- C语言新标准C11
- [C++] constexpr和常量表达式
- constexpr讲解--C++11
- constexpr
- constexpr
- 关于constexpr关键字以及修饰的函数
- linux下配置nginx
- NYOJ题目6 喷水装置(一)
- SpringMVC入门
- POI 的全部操作大全
- python字符串语法
- C++11新标准constexpr关键字
- JS获取上一访问页面URL地址——(上)
- 排序2——选择排序及优化
- 存储技术SAN、NAS、NFS、DAS、RAW、文件系统、ASM、Exadata、HDFS、LVM、RAID、LUN、Samba
- 基于item协同过滤算法实现
- ViewPager的刷新以及复用
- tomcat7.x 点击\bin\tomcat7.exe一闪而过,点击tomcat7w.exe提示未安装服务
- 《所谓情商高就是会说话》
- vue的学习记录--环境配置