C++类成员初始化列表的构造顺序

看下面代码, 输出结果是多少呢?

class A{
    public:
        A(int k) : j(k), i(j)
        {

        }
        void show()
        {
            cout << this->i << endl;
            cout << this->j << endl;
        }
    private:
        int i;
        int j;
};

void test()
{
    A a(3);
    a.show();
}

int main(int argc, char const *argv[])
{
    test();
    return 0;
}

这里很容易让人以为先用3对j进行初始化,然后j再对i进行初始化,那么i和j都是3。实施缺相反,初始化列表的初始化顺序与变量声明的顺序一致。也就是说,j先对i初始化,然后2再对j初始化。
故输出内容

0 // 这儿也不一定是0跟编译器有关。但一定不是3
3

猜你喜欢

转载自www.cnblogs.com/Hijack-you/p/12026314.html
今日推荐