本文摘自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++ 判断本机是否有.net环境
C++ 引用和指针区别
C++中字符串比较函数strcmp怎么用?
第一章C++:函数返回值、gnu编译器命令
C++如何获取系统时间?
在c/C++中如何使用extern关键字
c和C++有什么区别
案例分享C++ map的使用和 查找性能测试
C++中string的用法介绍
microsoft visual C++ 怎么使用?
更多相关阅读请进入《C++》频道 >>
转载请注明出处:木庄网络博客 » 区分C++常量表达式、const、constexpr(附代码)