私はCPPの初心者だと以下のように理解できませんでした:struct内でconst static変数を初期化する必要があるのはなぜですか?
ここstruct A{
int i;
static int j;
}
int A::j = 20;
、 を静的varibleがA
内で初期化することができない理由を私は理解し、それがスコープ解決を使用してA
のoutisedを初期化する必要があります。 (つまり、j
のポイントメモリが割り当てられ、値が初期化されます)、j
は、静的変数であり、すべてのオブジェクトに対して静的な記憶域を持つため、ここではsizeof(A)
に追加されません。私が直接、構造体宣言にb
の値を初期化することを余儀なくしています。ここ
struct B{
int a;
const static int b = 20;
}
、 :
は、次のスクリプトを考えてみましょう。静的変数がconst
タイプの場合、これはなぜそうですか? この変数をB
の範囲外に定義しようとすると、前の宣言がb
であることを示すコンパイラー・エラーがスローされます。ここでb
のメモリが実際に割り当てられ、なぜそれが宣言内で初期化されなければならないのですか?通常の静的変数のように::
演算子を使用して初期化できないのはなぜですか?
宣言では、 'b'の値を強制的に初期化する必要はありません。 'const int B :: b = 20;'はうまく動作します。あなたの 'struct'宣言の最後に'; 'を追加するのを忘れたと思います。 –
'B'の外側で' b'を初期化しようとするとどうなりますか?コンパイラエラーが出ますか?エラーは何ですか? –
@FrançoisAndrieux静的変数が 'const static'型である場合、なぜ通常の 'static'変数とは違って変数の値を与えることができますか? – Mbeginner