3.constexpr
constexpr 常量表达式
什么是常量表达式
所谓常量表达式,指的就是由多个(≥1)常量组成的表达式。
换句话说,如果表达式中的成员都是常量,那么该表达式就是一个常量表达式。
这也意味着,常量表达式一旦确定,其值将无法修改。
常量表达式的作用
C++ 程序的执行过程大致要经历编译、链接、运行这 3 个阶段。
非常量表达式只能在程序运行阶段计算出结果。
而常量表达式的计算往往发生在程序的编译阶段,这可以极大提高程序的执行效率,因为表达式只需要在编译阶段计算一次,节省了每次程序运行时都需要计算一次的时间。
C++11 标准提供了 constexpr 关键字,使指定的常量表达式获得在程序编译阶段计算出结果的能力,而不必等到程序运行阶段。
constexpr 可用于修饰普通变量、函数(包括模板函数)以及类的构造函数。
和const的区别
const并未区分出编译期常量和运行期常量,constexpr限定在了编译期常量。
但是constexpr修饰的函数,返回值不一定是编译期常量。可以利用std::array需要编译期常量才能编译通过的小技巧,来检测所写的函数是否真的产生编译期常量了。
使用场景
就是为了提高C++的执行效率,在编译期进行优化
修饰普通变量
修饰函数
整个函数的函数体中,除了可以包含 using 指令、typedef 语句以及 static_assert 断言外,只能包含一条 return 返回语句。
修饰构造函数
不知道这有什么意义,等碰到了再补充
最后更新于
这有帮助吗?