4
class A
{
private:
int a; 
int b; 
int c;

public:
A() : b(2), a(1), c (3)
{
}
};

C++ 標準データ メンバーは、宣言された順序で構築および初期化されるため、正しいですか?

しかし、初期化リストを使用する場合、データ メンバーの順序を変更していますが、初期化リストの順序または宣言の順序で初期化しますか?

4

5 に答える 5

7

宣言の順序では、初期化リストの順序は関係ありません。一部のコンパイラでは、初期化リストの順序が宣言の順序と異なることを示す警告 (gcc) が実際に表示されます。これが、メンバーを使用して他のメンバーなどを初期化する場合にも注意する必要がある理由です。

于 2012-08-25T22:42:38.660 に答える
1

C ++ 11では、次のこともできます。

class A
{
    private:
    int a = 1; 
    int b = 2; 
    int c = 3; 

public:
    A()
    {
       // your code
    }
};
于 2012-08-25T23:17:23.963 に答える
1

いいえ、初期化リストは関係ありません。

メンバーは常に、クラス本体に表示される順序で初期化されます。

コンパイラによっては、順序が異なる場合に警告を表示することさえあります。

于 2012-08-25T22:43:02.073 に答える
1

宣言順に初期化します。また、多くのコンパイラは、標準で許可されているにもかかわらず、初期化リストが宣言の順序と一致しないことを警告しています。

于 2012-08-25T22:43:30.423 に答える
0

クラス データ メンバーは常に、クラス内の宣言の上から下の順序で初期化され、逆の順序で破棄されます。初期化リストは、データ メンバーの初期化の順序には影響しません。

初期化リストを使用する際のよりトリッキーな状況については、以下の関連する質問も確認できます。

コンストラクターの初期化子リスト内の初期化されたデータ メンバー オブジェクトに対する関数呼び出しのしくみ

于 2015-12-01T03:56:58.800 に答える