GCC -Weffc ++警告

Hun*_*unk 2 c++ gcc

我对这个Weffc++警告有一个理解问题.

main.cpp:在构造函数'B :: B()'中:main.cpp:13:1:警告:'B :: a'应该在成员初始化列表中初始化[-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;
}
Run Code Online (Sandbox Code Playgroud)

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

A a = {};
Run Code Online (Sandbox Code Playgroud)

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

Lig*_*ica 6

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

它会.

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

你没有.

我对Weffc ++警告有一个理解问题

就是这样.一个警告.如果我们查看文档,我们发现它-Weffc++代表了一个样式指南,仅此而已.您是否希望遵循Meyers的风格完全取决于您.

如果您确实想要遵循该建议,您可以这样做:

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

   A a;
};
Run Code Online (Sandbox Code Playgroud)

......或者你已经表现出来的方式.

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