C++ Primer 对constexpr 和常量表达式的讲解

2.4.4 constexpr 和常量表达式

常量表达式 

指值不会改变,且在编译过程中就能得到计算结果的表达式,如:

const int max_files = 20; // max_files是常量表达式
const int limit = max_files + 1; // limit是常量表达式
int staff_size = 27; // staff_size不是常量表达式,因为得到的值是普通的int,而不是const int
const int sz = get_size(); // sz不是常量表达式,虽然sz是常量,但具体的值到运行时才能获取到,所以也不是。

constexpr变量 

是常量表达式安全性的升级。因为在复杂系统中很难分辨一个初始值到底是不是常量表达式。虽然可以用const来定义,但在使用时依然会发生初始值不是常量表达式的情况。可以说,在这种情况下,对象的定义和使用是两回事。

C++11规定,允许将变量声明为constexpr类型,以便由编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化:

constexpr int mf = 20; // 20是常量表达式
constexpr int limit = mf + 1; // mf+1是常量表达式
constexpr int sz = size(); // 只有当size是一个constexpr函数时才是一条正确的声明语句

版权声明

弈心博客


本文首发site_name,转载请附上博文链接!