常量表达式: 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;

 

posted @ 2020-08-20 14:59  kuaqi  阅读(288)  评论(0编辑  收藏  举报