四、const限定符
constexpr和常量表达式
- 常量表达式:值不会改变并且在编译过程中就能得到计算结果的表达式,字面值属于常量表达式,用常量表达式初始化的
const对象也是常量表达式。仅当对象使用const修饰,且初始值为常量表达式时,该对象(或表达式)为常量表达式。
/* 初始值为字面值,且数据类型为 const int,故为常量表达式 */
const int one = 1;
/* 属于常量表达式 */
const int two = one + 1;
/* 非常量表达式 */
int three = 3;
/* four 的数据类型为 const int,但是其具体值需到运行阶段才能确定,故非常量表达式 */
const int four = get_four();
-
constexpr变量:将变量声明为constexpr类型后,编译器可验证变量是否为一个常量表达式。声明为constexpr的变量一定是一个常量,且必须用常量表达式初始化。当使用函数初始化constexpr类型的变量时,仅当函数constexpr函数时正确。注:当认定变量是一个常量表达式时,通常将其声明为
constexpr类型。