C++ の初期化に関する Google の投稿をいくつか読みました。これらの投稿から私が選んだコンセプトは次のとおりです。
- C++ の初期化
の順序は次のとおりです。
- ゼロ初期化;
- 静的初期化;
- 動的初期化。
- 静的オブジェクト(変数を含む) は、最初にZero-initializedであり、次にStatic-initializedです。
初期化の問題についていくつか問い合わせがあります(ストレージ クラスの問題も関連している可能性があります)。
- グローバル オブジェクト( staticキーワードなしで定義) も静的オブジェクトですよね?
- グローバル オブジェクトも静的オブジェクトのように、上記のように 2 段階で初期化されますね。
- 静的初期化とは何ですか? 静的オブジェクト ( staticキーワードで定義) の初期化を参照していますか?
- また、静的キーワードを使用してブロック内 (つまり関数内) で定義されたオブジェクトは、実行スレッドが最初にブロックに入ったときに初期化されることも読みました! これは、main関数の実行前にローカルの静的オブジェクトが初期化されないことを意味します。これは、上記の 2 つの手順のように初期化されていないことを意味しますよね?
- 動的初期化とは、 new演算子によって作成されたオブジェクトの初期化を指しますよね?
myClass obj = myClass(100);
またはのような初期化を参照する場合がありますmyClass obj = foo();
初期化とストレージ クラス指定子の問題に関する問い合わせが多すぎます。C++2003 標準ドキュメントを読みましたが、ドキュメント全体に散らばっているため、明確なロジックを見つけることができません。
ストレージ クラス指定子と初期化のマップ全体を論理的に説明する回答をいただければ幸いです。どなたでも参考にどうぞ!
私の質問を説明するかもしれないコード:
class myClass{
public:
int i;
myClass(int j = 10): j(i){}
// other declarations
};
myClass obj1;//global scope
static myClass obj2(2);//file scope
{ //local scope
myClass obj3(3);
static myClass obj4(4);
}
編集:
私の質問がかなり退屈だと思う場合は、上記のコードに基づいてアイデアを説明するのに役立ちます。