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++来自拍; 成员相互依赖就是其中之一.我知道这一点,无论如何我都避免这种情况,就像我会避免空指针解除引用一样.
任意初始化顺序可以非常安全,就像上面的代码片段一样.我不满意编译器没有认识到这种情况并抱怨无论如何.我的意思是,它并没有抱怨每一个指针取消引用都没有立即进行空检查,是吗?
在此特定示例中,可以安全地忽略警告.如果他们相互依赖,那你就有问题了.你可以把它关掉-Wno-reorder
.
但最好重新订购它们.它可能对编译器没有什么影响,但是你会养成按照它们出现的顺序初始化成员的习惯,这是一件好事.
归档时间: |
|
查看次数: |
2705 次 |
最近记录: |