1、constexpr 和常量表达式
常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。
例子:(1)const int max_files=20; //max_files是常量表达式
(2)const int limit=max_files+1; //limit是一个常量表达式
(3)int staff_size=27; //staff_size不是常量表达式 原因:尽管staff_size的初始值是个字面值常量,但由于他的数据类型只是一个普通的int而非const int,所以他不属于常量表达式。
(4)const int sz=get_size(); //sz不是常量表达式 原因:尽管sz本身是一个常量,但是他的具体值直到运行时才能获取到,所以也不是常量表达式。
2、声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化:
例子: constexpr int mf=20;//20是常量表达式
constexpr int limit=mf+1;//mf+1是常量表达式
注意:(1)到目前为止我们接触到的数据类型中,算术类型、引用和指针都属于字面值类型。自定义类Sale_item、IO库、string类型则不属于字面值类型,也不能定义成constexpr。