• C++常量表达式、const、constexpr(C++11新增)的区别


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

    例1:

    #include <iostream>
    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 <iostream>
    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 <iostream>
    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;
    }
  • 相关阅读:
    https://和http://区别
    选择排序法
    冒泡排序法-----一点也不简单喔
    hadoop启动后没有datanode怎么办
    洛谷 1379 八数码难题
    Floyd 算法详解
    datagridview 点击列标题排序
    Python【每日一问】05
    Python【每日一问】04
    Python【每日一问】03
  • 原文地址:https://www.cnblogs.com/a3192048/p/12241323.html
Copyright © 2020-2023  润新知