2017-04-03 195 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++設置。