2017-04-03 8 views
1

Ich habe ein Verständnisproblem für die Weffc++ Warnung.GCC -WeffC++ Warnung

main.cpp: In Konstruktor 'B :: B()': main.cpp: 13: 1: Warnung: 'B :: a' sollte in der Initialisierungsliste initialisiert werden [-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; 
} 

Wenn ich schreibe oder Initialisiererliste verwenden ich habe kein Problem.

A a = {}; 

Ich dachte, der Standardkonstruktor wird automatisch aufgerufen? Warum muss ich ihn explizit benutzen?

Antwort

5

Ich dachte der Standardkonstruktor wird automatisch aufgerufen?

Es wird.

Warum muss ich ihn explizit verwenden?

Sie nicht.

Ich habe ein Verständnisproblem für die WeffC++

, dass es nur warnen. Eine Warnung. Wenn wir in the documentation suchen, finden wir, dass -Weffc++ eine Styleguide, nichts mehr darstellt. Es liegt ganz bei Ihnen, ob Sie dem Stil von Meyers folgen wollen oder nicht.

Wenn Sie den Vorschlag folgen wollen, könnte man so tun, wie folgt:

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

    A a; 
}; 

& hellip; oder auf die Weise, die du bereits gezeigt hast.

Ehrlich gesagt würde ich nicht stören. Ich verwende nicht die -Weffc++ Einstellung.

Verwandte Themen