GCC警告初始化顺序与声明顺序不匹配

Sev*_*yev 2 c++ gcc constructor

以下代码:

class C
{
    int a, b;
public:
    C()
    :b(0), a(0)
    {}
};
Run Code Online (Sandbox Code Playgroud)

导致GCC抱怨错误的初始化顺序.特别:

../AppSrc/MainForm.cpp: In constructor 'C::C()':
../AppSrc/MainForm.cpp:51:9: warning: 'C::b' will be initialized after
../AppSrc/MainForm.cpp:51:6: warning:   'int C::a'
Run Code Online (Sandbox Code Playgroud)

什么是重要的,为什么抱怨?这与成员之间的相互依赖性不一样,也可能不存在.原始人,呃.

哦,如何关闭此警告或至少减少它的侵略性?

编辑:有很多方法可以用C++来自拍; 成员相互依赖就是其中之一.我知道这一点,无论如何我都避免这种情况,就像我会避免空指针解除引用一样.

任意初始化顺序可以非常安全,就像上面的代码片段一样.我不满意编译器没有认识到这种情况并抱怨无论如何.我的意思是,它并没有抱怨每一个指针取消引用都没有立即进行空检查,是吗?

Luc*_*ore 6

在此特定示例中,可以安全地忽略警告.如果他们相互依赖,那你就有问题了.你可以把它关掉-Wno-reorder.

最好重新订购它们.它可能对编译器没有什么影响,但是你会养成按照它们出现的顺序初始化成员的习惯,这是一件好事.