class A
{
private:
int a;
int b;
int c;
public:
A() : b(2), a(1), c (3)
{
}
};
C++ 標準データ メンバーは、宣言された順序で構築および初期化されるため、正しいですか?
しかし、初期化リストを使用する場合、データ メンバーの順序を変更していますが、初期化リストの順序または宣言の順序で初期化しますか?
class A
{
private:
int a;
int b;
int c;
public:
A() : b(2), a(1), c (3)
{
}
};
C++ 標準データ メンバーは、宣言された順序で構築および初期化されるため、正しいですか?
しかし、初期化リストを使用する場合、データ メンバーの順序を変更していますが、初期化リストの順序または宣言の順序で初期化しますか?
宣言の順序では、初期化リストの順序は関係ありません。一部のコンパイラでは、初期化リストの順序が宣言の順序と異なることを示す警告 (gcc) が実際に表示されます。これが、メンバーを使用して他のメンバーなどを初期化する場合にも注意する必要がある理由です。
C ++ 11では、次のこともできます。
class A
{
private:
int a = 1;
int b = 2;
int c = 3;
public:
A()
{
// your code
}
};
いいえ、初期化リストは関係ありません。
メンバーは常に、クラス本体に表示される順序で初期化されます。
コンパイラによっては、順序が異なる場合に警告を表示することさえあります。
宣言順に初期化します。また、多くのコンパイラは、標準で許可されているにもかかわらず、初期化リストが宣言の順序と一致しないことを警告しています。
クラス データ メンバーは常に、クラス内の宣言の上から下の順序で初期化され、逆の順序で破棄されます。初期化リストは、データ メンバーの初期化の順序には影響しません。
初期化リストを使用する際のよりトリッキーな状況については、以下の関連する質問も確認できます。