常量表达式: const constexpr
一、常量表达式
1、概念
(1)指值不会改变,在编译过程中就能得到计算结果的表达式;
(2)编译器会在编译阶段将常量替换为对应的值;
2、判别
(1)字面值属于常量表达式
(2)用常量表达式初始化的const对象也是常量表达式
(3)是不是常量表达式由数据类型与初始值决定
const int max_files = 20; const int limit = max_files +20; //是 int staff_size = 70;//不是 const int sz = get_size(); //不是
二、constexpr变量
1、说明:
(1)c++11新规定:允许将变量声明为constexpr类型,以便让编译器来验证变量是否是一个常量表达式
(2)用constexpr声明的变量一定是个常量表达式,而且必须由常量表达式初始化;
2、constexpr 常量指针
(1)constexpr会将指针对象置为顶层const
const int * p = nullptr; //指向整形常量的指针 constexpr int * q = nullptr; //本身是个常量指针
constexpr const int * p0 = nullptr;
(2)constexpr指针必须是nullptr、0、或者是储存在某个固定地址中的对象,不可以是函数体中变量;
(3)constexpr指针跟常量指针一样,既可以指向常量,也可以指向非常量
// j必须定义在函数体之外!全局变量? int j = 0; constexpr int * p = &j;