博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
constexpr
阅读量:4696 次
发布时间:2019-06-09

本文共 851 字,大约阅读时间需要 2 分钟。

(转)

onstexpr是C++11中新增的关键字,其语义是“常量表达式”,也就是在编译期可求值的表达式。最基础的常量表达式就是字面值或全局变量/函数的地址或sizeof等关键字返回的结果,而其它常量表达式都是由基础表达式通过各种确定的运算得到的。constexpr值可用于enum、switch、数组长度等场合。

constexpr所修饰的变量一定是编译期可求值的,所修饰的函数在其所有参数都是constexpr时,一定会返回constexpr。

constexpr int Inc(int i) {

return i + 1;
}

constexpr int a = Inc(1); // ok

constexpr int b = Inc(cin.get()); // !error
constexpr int c = a * 2 + 1; // ok
constexpr还能用于修饰类的构造函数,即保证如果提供给该构造函数的参数都是constexpr,那么产生的对象中的所有成员都会是constexpr,该对象也就是constexpr对象了,可用于各种只能使用constexpr的场合。注意,constexpr构造函数必须有一个空的函数体,即所有成员变量的初始化都放到初始化列表中。

struct A {

constexpr A(int xx, int yy): x(xx), y(yy) {}
int x, y;
};

constexpr A a(1, 2);

enum {SIZE_X = a.x, SIZE_Y = a.y};

constexpr的好处:

是一种很强的约束,更好地保证程序的正确语义不被破坏。

编译器可以在编译期对constexpr的代码进行非常大的优化,比如将用到的constexpr表达式都直接替换成最终结果等。
相比宏来说,没有额外的开销,但更安全可靠。

转载于:https://www.cnblogs.com/Bz1092467670/p/10946759.html

你可能感兴趣的文章
java内存模型之二volatile内存语义
查看>>
WPF 界面提示加载出错
查看>>
SQL批量分离工具
查看>>
Erlang与ActionScript3采用JSON格式进行Socket通讯
查看>>
python数据类型--数字、字符串
查看>>
CentOS7使用firewalld打开关闭防火墙与端口
查看>>
OAuth2.0(基于django2.1.2实现版本)
查看>>
Servlet实现图片读取显示
查看>>
正则表达式去除括号的问题
查看>>
基于深度学习的目标检测研究进展
查看>>
【c++】字符串的冒泡排序【存疑,待查】
查看>>
ES6常用语法
查看>>
RabbitMQ环境搭建教程收集(待实践)
查看>>
Spring使用ComponentScan扫描Maven多模块工程的其它模块
查看>>
Jenkins环境拓扑及部署流程
查看>>
Servlet教程
查看>>
ThingsBoard
查看>>
hdu1024 Max Sum Plus Plus 滚动dp
查看>>
python的requests快速上手、高级用法和身份认证
查看>>
c# 整个工程(包括窗体工程)做成dll
查看>>