首頁  >  文章  >  後端開發  >  區分C++常數表達式、const、constexpr(附程式碼)

區分C++常數表達式、const、constexpr(附程式碼)

php是最好的语言
php是最好的语言原創
2018-08-06 14:33:361865瀏覽

常數表達式是指值不會改變且在編譯過程中就能夠得到計算結果的表達式,能在編譯時求值的表達式。

範例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:

區分C++常數表達式、const、constexpr(附程式碼)

#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[&#39;y&#39;];  // 没问题,&#39;y&#39;的ASCII码为121,相当于 char arr2[121];

	char arr3[a4];   // 编译报错,因为a4不是常量表达式


	return 0;
}

 相關文章:

分享多個C#常用正規表示式的實例

PHP定義常數是,const和define的區別

以上是區分C++常數表達式、const、constexpr(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn