网站自助制作,自己做的网站怎么链接火车头采集,会员类网站模板,360提交网站收录入口#x1f440;#x1f440;常量表达式 常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。 字面值属于常量表达式#xff0c;用常量表达式初始化的const对象也是常量表达式。 那么是什么来就决定是不是常量表达式呢#xff1f;一个对象是不是常量表达式主要… 常量表达式 常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。 字面值属于常量表达式用常量表达式初始化的const对象也是常量表达式。 那么是什么来就决定是不是常量表达式呢一个对象是不是常量表达式主要看它的数据结构和初始值。 例 const int max 20 // max是常量表达式 const int maxx max1 //maxx是常量表达式 int litter 10 //litter 不是常量表达式 const int sz get-size //sz 不是常量表达式 注释 litter 虽然是一个字面常量但是它的类型只是普通的类型int所以不是常量表达式。 sz 虽然是一个常量const但是它的具体值只能运行时才能获取所以不是常量表达式。 constexpr常量 c11新标准规定允许将变量声明为constexpr类型用来由编译器来验证变量的值是否为一个常量表达式。 声明constexpr的变量一定是一个常量而且必须用常量表达式初始化 constexpr int mf 20 // 20是常量表达式 constexpr int litter mf1 //mf1 是常量表达式 constexpr int max size //只有当size是一个constexpr函数时才是一条正确的声明语句。 不能使用普通函数作为constexpr变量的初始值。 一般来说如果认定变量是一个常量表达式那就把它声明成constexpr类型。 指针和constexpr 在constexpr声明中如果定义了一个指针限定符constexpr仅对指针有效与指针所指对象无关 const int *p null // p是一个指向整形常量的指针 constexpr int *q ptr // q是一个指向整数的常量指针 constexpr指针既可以指向常量也可以指向一个非常量 constexpr int *p null //p是一个指向整数的常量指针其值为空。 int i 1 constexpr int j 2 // j的类型是整形常量 // i j 都必须定义在函数之外 constexpr const int *p j //p是常量指针指向整形常量 j constexpr int *p1 i// p1是常量指针指向整数i