3.constexpr

constexpr 常量表达式

什么是常量表达式

所谓常量表达式,指的就是由多个(≥1)常量组成的表达式。

换句话说,如果表达式中的成员都是常量,那么该表达式就是一个常量表达式。

这也意味着,常量表达式一旦确定,其值将无法修改。

常量表达式的作用

C++ 程序的执行过程大致要经历编译、链接、运行这 3 个阶段。

非常量表达式只能在程序运行阶段计算出结果。

而常量表达式的计算往往发生在程序的编译阶段,这可以极大提高程序的执行效率,因为表达式只需要在编译阶段计算一次,节省了每次程序运行时都需要计算一次的时间。

C++11 标准提供了 constexpr 关键字,使指定的常量表达式获得在程序编译阶段计算出结果的能力,而不必等到程序运行阶段。

constexpr 可用于修饰普通变量、函数(包括模板函数)以及类的构造函数。

和const的区别

const并未区分出编译期常量和运行期常量,constexpr限定在了编译期常量。

但是constexpr修饰的函数,返回值不一定是编译期常量。可以利用std::array需要编译期常量才能编译通过的小技巧,来检测所写的函数是否真的产生编译期常量了。

使用场景

就是为了提高C++的执行效率,在编译期进行优化

修饰普通变量

修饰函数

  1. 整个函数的函数体中,除了可以包含 using 指令、typedef 语句以及 static_assert 断言外,只能包含一条 return 返回语句。

修饰构造函数

不知道这有什么意义,等碰到了再补充

最后更新于

这有帮助吗?