定数式とは、 値が変化しない式であり、 コンパイル処理中に計算結果 が得られ、 コンパイル時 ## に評価することができます。 # 表現。
例 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; }
#例 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; }
以上がC++ 定数式、const、constexpr を区別する (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。