我对这个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)
我以为默认构造函数会自动调用?为什么我必须明确地使用他?
我以为默认构造函数会自动调用?
它会.
为什么我必须明确地使用他?
你没有.
我对Weffc ++警告有一个理解问题
就是这样.一个警告.如果我们查看文档,我们发现它-Weffc++代表了一个样式指南,仅此而已.您是否希望遵循Meyers的风格完全取决于您.
如果您确实想要遵循该建议,您可以这样做:
class B
{
public:
B() : a() {} // <-- a() in the ctor-initialiser
~B() {}
A a;
};
Run Code Online (Sandbox Code Playgroud)
......或者你已经表现出来的方式.
坦率地说,我不会打扰.我不使用该-Weffc++设置.