C++ 定数式、const、constexpr を区別する (コード付き)

php是最好的语言
リリース: 2018-08-06 14:33:36
オリジナル
1872 人が閲覧しました

定数式とは、 値が変化しない式であり、 コンパイル処理中に計算結果 が得られ、 コンパイル時 ## に評価することができます。 # 表現。
例 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[&#39;y&#39;];  // 没问题,&#39;y&#39;的ASCII码为121,相当于 char arr2[121];

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


	return 0;
}
ログイン後にコピー
関連記事:

C++ 定数式、const、constexpr を区別する (コード付き)

C で一般的に使用される正規表現の例を複数共有する

#PHP の定数の定義、const とdefineの違い

以上がC++ 定数式、const、constexpr を区別する (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
c++
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート