千家信息网

如何区分C++常量表达式、const、constexpr

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要介绍如何区分C++常量表达式、const、constexpr,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!常量表达式是指值不会改变且在编译过程中就能够得到计算结果的
千家信息网最后更新 2025年01月18日如何区分C++常量表达式、const、constexpr

这篇文章主要介绍如何区分C++常量表达式、const、constexpr,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

常量表达式是指值不会改变且在编译过程中就能够得到计算结果的表达式,能在编译时求值的表达式。

例1:

#include using namespace std;int main(){                const int a1 = 10;           // a1是常量表达式。        const int a2 = a1 + 20;      // a2是常量表达式        int a3 = 5;                  // a3不是常量表达式        const int a4 = a3;           // a4不是常量表达式,因为a3程序的执行到达其所在的声明处时才初始化,所以变量a4的值程序运行时才知道。但编译没问题!        return 0;}

以上代码可正常编译。

说明了const声明的不一定就是常量表达式!

C++11新标准规定,允许将变量声明为constexpr 类型以便由编译器来验证变量的值是否是常量表达式。constexpr 指定符声明可以在编译时求得函数或变量的值,声明为constexpr的变量一定是一个常量,而且必须用常量表达式来进行初始化。

例2:

#include using namespace std;int main(){                const int a1 = 10;           // a1是常量表达式。        const int a2 = a1 + 20;      // a2是常量表达式        int a3 = 5;                  // a3不是常量表达式        constexpr int a4 = a3;           // a4不是常量表达式,因为a3程序的执行到达其所在的声明处时才初始化,所以变量a4的值程序运行时才知道。编译报错!        return 0;}

constexpr int a4 = a3; 编译将报错!

例3:

#include using namespace std;int main(){                const int a1 = 10;           // a1是常量表达式。        const int a2 = a1 + 20;      // a2是常量表达式        int a3 = 5;                  // a3不是常量表达式        const int a4 = a3;           //   a4不是常量表达式,因为a3程序的执行到达其所在的声明处时才初始化,所以变量a4的值程序运行时才知道。编译报错!        char arr1[a2];   // 没问题        char arr2['y'];  // 没问题,'y'的ASCII码为121,相当于 char arr2[121];        char arr3[a4];   // 编译报错,因为a4不是常量表达式        return 0;}

以上是"如何区分C++常量表达式、const、constexpr"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0