代码之家  ›  专栏  ›  技术社区  ›  Michael

将一个成员分配给构造函数中的另一个成员是否合法?[副本]

  •  2
  • Michael  · 技术社区  · 7 年前

    m_B m_A 在之后声明 ?

    class C {
        int m_A, m_B;
        C() : m_A(0), m_B(m_A) {}
    };
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   haccks    7 年前

    是的,将一个成员分配给构造函数中的另一个成员是合法的。标准中有一个例子(§15.6.2/15)

    class X {
        int a;
        int b;
        int i;
        int j;
    public:
        const int& r;
        X(int i): r(a), b(i), i(i), j(this->i) { }
    };
    

    注意,数据成员是按照它们在类定义中声明的顺序初始化的。成员初始值设定项的顺序无关紧要。

    class C {
        int m_A, m_B;
        C() : m_B(m_A), m_A(0) {}     // Swapped the member initialization order.
    };
    

    但这是无效的

    class C {
            int m_B, m_A;             // Swapped the declaration order.
            C() : m_B(m_A), m_A(0) {}
        };