2017-04-03 96 views
1

我对Weffc++警告有一个理解问题。GCC -WeffC++警告

main.cpp中:在构造 'B :: B()': main.cpp中:13:1:警告: 'B ::一个' 应该在成员初始化列表被初始化[-WeffC++] B(){} ^

#include <iostream> 

class A 
{ 
public: 
    A() {} 
    ~A() {} 
    void test() { std::cout << "Hello world\n"; } 
}; 

class B 
{ 
public: 
    B() {} 
    ~B() {} 
    A a; 
}; 

int main() 
{ 
    B b; 
    b.a.test(); 
    return 1; 
} 

如果我写,或使用初始化列表我没有问题。

A a = {}; 

我以为默认的构造函数会自动调用吗?为什么我必须明确地使用他?

回答

5

我以为默认的构造函数会自动调用吗?

它会的。

为什么我必须明确地使用他?

你不知道。

我有一个认识问题的WeffC++警告

这只是。一个警告。如果我们查看the documentation,我们发现-Weffc++代表款式指南,仅此而已。你是否希望遵循迈尔斯的风格完全取决于你。

如果你确实想跟随的建议,你可以这样做是这样的:

class B 
{ 
public: 
    B() : a() {} // <-- a() in the ctor-initialiser 
    ~B() {} 

    A a; 
}; 

&hellip;或者你已经显示的方式。

坦率地说,我不打扰。我不使用-Weffc++设置。