1. ホーム
  2. c++

[解決済み] C++のセマンティクス、`static const` と `const` の比較

2022-04-25 21:04:03

質問

C++では、具体的に、例えば、どのような意味での違いがあるのでしょうか。

static const int x = 0 ;

そして

const int x = 0 ;

ともに static をリンクとストレージクラス指定子として使用することができます(つまり、関数の内側と外側の両方)。

どのように解決するのですか?

ファイルスコープでは、C++と変わりません。 const は内部リンクをデフォルトとし、すべてのグローバル変数が静的寿命を持つようにします。 しかし、最初の変形はCでも同じ動作をしているので、それを利用するのは良い理由かもしれません。

関数内では、2番目のバージョンはパラメータから計算することができます。CやC++では、他のいくつかの言語が要求するようなコンパイル時の定数である必要はありません。

クラス内では、基本的に関数と同じです。インスタンス const の値を計算することができます。 ctor-initializer-list . A static const はスタートアップの初期化時に設定され、プログラムの残りの部分は変更されません。 (注) static 宣言と初期化が分離されているため、少し見た目が異なります)。

C++で思い出してください。 const というのは 読み取り専用 ではなく 定数 . もし、ポインタから const の場合、あなたが見ていない間にプログラムの他の部分がその値を変更する可能性があります。 もし変数が const 初期化した後は誰も変更できませんが、それでも初期化は恣意的に複雑にすることができます。