c++ - GCC -Weffc++ 警告

标签 c++ gcc

我对 Weffc++ 警告有理解上的问题。

main.cpp: In constructor ‘B::B()’: main.cpp:13:1: warning: ‘B::a’ should be initialized in the member initialization list [-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 = {};

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

最佳答案

I thought the default constructor will called automatically?

会的。

Why I have to use him explicit ?

你不知道。

I have an understanding problem for the Weffc++ warning

就是这样。一个警告。如果我们查看 the documentation ,我们发现 -Weffc++ 代表一个风格指南,仅此而已。是否要遵循迈耶斯的风格完全取决于您。

如果你确实想听从建议,你可以这样做:

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

   A a;
};

……或者以您已经展示的方式。

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

关于c++ - GCC -Weffc++ 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43188038/

相关文章:

c - C 中结构之间的额外填充

c++ - 如何更改默认的 C++ 标准库路径

c - 如果一个简单的 linux c 程序链接到自定义的 glibc 库,则会出现段错误

python - Cython 扩展类型属性误解

C++ 堆栈与堆分配

c++ - 为什么下面的代码在C++中是非法的

c++ - 某些平台上的变量初始化并非随处可见

c++ - OpenCV 构建正常,调试抛出错误,从 .exe 运行正常

c++ - Vulkan 中动态统一缓冲区的缓冲区内存分配

c++ - 我是否需要做一些特别的事情来让我的 C++ 程序使用 gcc 进行编译?