コーディング中に、次のことを宣言しました。
const int a = 4;
「a」は、コンパイラが変更できない変数ですか? それとも static const int a = 4 が必要ですか?
ありがとう!
を使用して定義する場合a
、const int a = 4;
を変更しないa
でください。a
のように直接変更しようとすると、コンパイラは診断メッセージを生成する必要がありますが、コンパイラが必ずしもキャッチしないa = 5;
変更を試行できる他の方法もあります。これを行うと、C 標準は結果の動作を定義しません。定義に追加しても、これは変わりません。a
* (int *) &a = 5;
static
const int a = 4;
コンパイラが変更を許可しない変数です。
static 修飾子は、変数の動作を変更します。具体的には、プログラムの実行開始時に変数が「割り当て」られ、プログラムの終了時にのみ割り当てが解除されることを意味します。特に、静的クラス変数は、インスタンス化されたオブジェクトとは無関係に状態を維持します。関数内の静的変数は、関数呼び出し間で状態を維持します。この場合、グローバル定数の静的修飾子は冗長であり、内部/外部リンケージを決定するためにのみ使用されます。
const として宣言した場合、a を変更することはできません。
const int a = 5;
a = 6;
コンパイルしません (式は変更可能な左辺値でなければなりません)。