C++11新特性:一般化常量表达式和constexpr.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
C++11 新特性:一般化常量表达式和constexpr C++11 新特性:一般化常量表达式和constexpr 是 C++11 中的一项重要新特性,它们使得编译器可以在编译期执行更多的优化和检查,从而提高代码的性能和可移植性。 一般化常量表达式是一个概念,它指的是在编译期可以被计算的表达式。例如,3 + 4 这个表达式会在编译期自动生成 7,而不会有任何副作用。常数表示式是编译器优化的最佳位置。编译器通常在编译期执行优化,并将生成的值存入生成的程序代码中。 然而,在 C++11 之前的版本中,常数表示式在函数调用时却有了额外的问题。例如,int getFive(){return 5;} int some_value[ getFive()+ 5] ;// Error! 上面的代码中,最后一句是非法的。尽管函数 getFive() 的返回值就是一个常量,但编译器并不能检测出来。它会认为该函数返回值是一个变量,因此报错。 constexpr 是 C++11 中的一个新关键字,它可以用于声明一个函数,该函数可以在编译期被执行,并生成一个常量值。例如,static constexpr int max (){return __INT_MAX__;} 这样,max() 就声明为一个 constexpr 函数。只有足够简单的函数(例如,仅有一行 return 语句,没有循环,不改变参数值等)可以被声明为 constexpr 的。 constexpr 函数的参数必须为常量表达式(因此才能在编译期运行函数),而函数本身则在运行时就被执行,其返回值直接进入到生成的代码。例如,constexpr int square( int x ){return x * x ;} constexpr int abs ( int x ){return x < 0? - x : x ;} constexpr int fac( int x ){return x > 2? x * fac( x -1):1;} float array[ square( 9 )] ;// Ok (not C99 VLA) std :: bitset<abs ( - 87 ) > s ;// Ok enum { Max = fac( 5)} ;// Ok 在 C++11 中,也有这么一个常量表达式的概念:constexpr int s = square( 5) ;// Ok constexpr int high = square( medium ) ;// error! 也有常量表达式构造函数的概念:struct complex { constexpr complex( double r, double i ) : re( r ) , im( i ){} ; 一般化常量表达式和 constexpr 是 C++11 中两个重要的新特性,它们可以使得编译器在编译期执行更多的优化和检查,从而提高代码的性能和可移植性。
- 粉丝: 18
- 资源: 7万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 球谐函数数学的 DirectXMath 扩展.zip
- test157-Baidu2用B4A写的Android小游戏
- 基于FPGA的SD卡音乐播放器工程和设计报告
- 基于MATLAB汉字定位检测识别系统【GUI含界面】.zip
- Delphi7实现RTSP代码部分关键源码和文档.zip
- 基于MATLAB谷物计数源码【含界面GUI】.zip
- 基于MATLAB谷物计数系统【含界面GUI】.zip
- 现代DX11系列教程使用Windows SDK(C++)开发Direct3D 11.x.zip
- 现代 DirectX 11 C++ 游戏引擎.zip
- 全唐诗维护用Delphi操作SQLite数据库正则表达式提取诗句