本文摘自PHP中文网,作者php是最好的语言,侵删。
常量表达式是指值不会改变且在编译过程中就能够得到计算结果的表达式,能在编译时求值的表达式。
例1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <iostream>
using namespace std;
int main()
{
const int a 1 = 10 ; // a 1 是常量表达式。
const int a 2 = a 1 + 20 ; // a 2 是常量表达式
int a 3 = 5 ; // a 3 不是常量表达式
const int a 4 = a 3 ; // a 4 不是常量表达式,因为a 3 程序的执行到达其所在的声明处时才初始化,所以变量a 4 的值程序运行时才知道。但编译没问题!
return 0 ;
}
|
以上代码可正常编译。
说明了const声明的不一定就是常量表达式!
C++11新标准规定,允许将变量声明为constexpr 类型以便由编译器来验证变量的值是否是常量表达式。constexpr
指定符声明可以在编译时求得函数或变量的值,声明为constexpr的变量一定是一个常量,而且必须用常量表达式来进行初始化。
例2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <iostream>
using namespace std;
int main()
{
const int a 1 = 10 ; // a 1 是常量表达式。
const int a 2 = a 1 + 20 ; // a 2 是常量表达式
int a 3 = 5 ; // a 3 不是常量表达式
constexpr int a 4 = a 3 ; // a 4 不是常量表达式,因为a 3 程序的执行到达其所在的声明处时才初始化,所以变量a 4 的值程序运行时才知道。编译报错!
return 0 ;
}
|
constexpr int a4 = a3; 编译将报错!
例3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <iostream>
using namespace std;
int main()
{
const int a 1 = 10 ; // a 1 是常量表达式。
const int a 2 = a 1 + 20 ; // a 2 是常量表达式
int a 3 = 5 ; // a 3 不是常量表达式
const int a 4 = a 3 ; // a 4 不是常量表达式,因为a 3 程序的执行到达其所在的声明处时才初始化,所以变量a 4 的值程序运行时才知道。编译报错!
char arr 1 [a 2 ]; // 没问题
char arr 2 [ 'y' ]; // 没问题, 'y' 的ASCII码为 121 ,相当于 char arr 2 [ 121 ];
char arr 3 [a 4 ]; // 编译报错,因为a 4 不是常量表达式
return 0 ;
}
|
相关文章:
分享多个C#常用正则表达式的实例
PHP定义常量是,const和define的区别
以上就是区分C++常量表达式、const、constexpr(附代码)的详细内容!
相关阅读 >>
C++清屏函数是什么
c/C++函数如何返回多个值?(代码示例)
C++在构造函数中使用new时,需要注意这些事!
求长为n的数中任意m个数的组合
C++中new的用法详解
C++中=和==的区别有哪些?
第三章C++:字符串string、向量vector和数组
dev C++怎么用
C++是一种高级程序设计语言吗?
C++文件怎么进行读取和写入操作
更多相关阅读请进入《C++》频道 >>
转载请注明出处:木庄网络博客 » 区分C++常量表达式、const、constexpr(附代码)