Effective Modern C++: constexpr
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Effective Modern C++: constexpr,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2277字,纯文字阅读大概需要4分钟。
内容图文
![Effective Modern C++: constexpr](/upload/InfoBanner/zyjiaocheng/1309/fa9cfb5963c74fb9a515406be90d8cf6.jpg)
constexpr是C++11中新增的关键字,其语义是“常量表达式”,也就是在编译期可求值的表达式。最基础的常量表达式就是字面值或全局变量/函数的地址或sizeof等关键字返回的结果,而其它常量表达式都是由基础表达式通过各种确定的运算得到的。constexpr值可用于enum、switch、数组长度等场合。
constexpr所修饰的变量一定是编译期可求值的,所修饰的函数在其所有参数都是constexpr时,一定会返回constexpr。
constexpr还能用于修饰类的构造函数,即保证如果提供给该构造函数的参数都是constexpr,那么产生的对象中的所有成员都会是constexpr,该对象也就是constexpr对象了,可用于各种只能使用constexpr的场合。注意,constexpr构造函数必须有一个空的函数体,即所有成员变量的初始化都放到初始化列表中。
特性:
- constexpr所修饰的对象一定具有const特性,但是const修饰的对象不一定都是constexpr.
- constexpr所修饰的函数在编译时运行,因此可以提高软件的运行速度,尽可能多用constexpr.
示例代码:
1 class Point { 2 public : 3 constexpr Point(double xVal=0, double yVal=0) noexcept: x(xVal), y(yVal){} 4 constexpr double xValue() const {return x;} 5 constexpr double yValue() const {return y;} 6void setX(double xVal) {x = xVal;} 7void setY(double yVal) {y = yVal;} 8 9private: 10double x; 11double y; 12}; 1314 constexpr Point midPoint(const Point& p1, const Point& p2){ 15return {(p1.xValue() + p2.xValue())/2, (p1.yValue() + p2.yValue())}; 16} 1718int main() 19{ 20 Point pt1(2.3, 2.1); 21 Point pt2(-12.1, -19); 22 Point ptMid = midPoint(pt1, pt2); 23 cout << ptMid.xValue() << endl; 24 cout << ptMid.yValue() << endl;】 25return0; 26 }
在C++14中,constexpr还可以修饰void函数:
1 class Point { 2 public : 3 constexpr Point(double xVal=0, double yVal=0) noexcept: x(xVal), y(yVal){} 4 constexpr double xValue() const {return x;} 5 constexpr double yValue() const {return y;} 6 constexpr void setX(double xVal) {x = xVal;} 7 constexpr void setY(double yVal) {y = yVal;} 8 9private: 10double x; 11double y; 12}; 1314 constexpr Point midPoint(const Point& p1, const Point& p2){ 15return {(p1.xValue() + p2.xValue())/2, (p1.yValue() + p2.yValue())}; 16} 1718 constexpr Point reflection(const Point& p){ 19 Point ret; 20 ret.setX(- p.xValue()); 21 ret.setY(- p.yValue()); 22return ret; 23} 2425int main() 26{ 27 Point pt1(2.3, 2.1); 28 Point pt2(-12.1, -19); 29 Point ptMid = midPoint(pt1, pt2); 30 cout << ptMid.xValue() << endl; 31 cout << ptMid.yValue() << endl; 32 Point ptReflection = reflection(ptMid); 33 cout << ptReflection.xValue() << endl; 34 cout << ptReflection.yValue() << endl; 35return0; 36 }
原文:https://www.cnblogs.com/Asp1rant/p/12339647.html
内容总结
以上是互联网集市为您收集整理的Effective Modern C++: constexpr全部内容,希望文章能够帮你解决Effective Modern C++: constexpr所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。