本文摘自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++虚成员函数和动态联编
在c/C++中如何使用extern关键字
c 语言和 C++ 有什么区别
c#调用C++ 动态链接库dll
C++输出语句
C++用什么软件编程
dev C++怎么改成中文
更多相关阅读请进入《C++》频道 >>
转载请注明出处:木庄网络博客 » 区分C++常量表达式、const、constexpr(附代码)