【编程语言学习】C++ Primer 对constexpr 和常量表达式的讲解

来源:互联网 发布:ec软件 编辑:程序博客网 时间:2024/06/06 01:05

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函数时才是一条正确的声明语句

原创粉丝点击