sponsored links

【编程语言学习】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函数时才是一条正确的声明语句

 

 

 

Tags: