禁用有关在派生类的复制构造函数中显式初始化基础构造函数的警告

use*_*303 2 c++ warnings g++

我正在使用g ++版本4.2.1并启用-Wextra.我在库中包含了一个标题,我不断收到关于库中类的警告,该类由-Wextra启用(我用BaseClass替换了类的实际名称):

warning: base class ‘class BaseClass’ should be explicitly initialized in the copy constructor
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何禁用此警告?例如,-Wextra也启用-Wuninitialized,但我可以通过将-Wno-uninitialized作为编译器标志传递来覆盖该简单.关于复制构造函数的警告有什么类似的吗?我无法在g ++联机帮助页或任何其他论坛帖子中找到答案.

asc*_*ler 6

鉴于:

class BaseClass
{
public:
    BaseClass();
    BaseClass(const BaseClass&);
};

class DerivedClass : public BaseClass
{
public:
    DerivedClass(const DerivedClass&);
};
Run Code Online (Sandbox Code Playgroud)

这个拷贝构造函数:

DerivedClass::DerivedClass(const DerivedClass& obj)
  // warning: no BaseClass initializer!
{
}
Run Code Online (Sandbox Code Playgroud)

真的意思是:

DerivedClass::DerivedClass(const DerivedClass& obj)
  // Default construct the base:
  : BaseClass()
{
}
Run Code Online (Sandbox Code Playgroud)

如果真的是你的意思,你可以输入一个像上面这样的默认构造函数初始化程序,警告就会消失.但编译器建议你可能真的想要这个:

DerivedClass::DerivedClass(const DerivedClass& obj)
  // Copy construct the base:
  : BaseClass(obj)
{
}
Run Code Online (Sandbox Code Playgroud)

  • 不,我没有.在这种情况下,我会多次更喜欢修复代码来禁用警告. (2认同)

Mar*_*k B 5

根据http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html(搜索Wextra),这是 的固有部分-Wextra,不能单独禁用(例如,它没有按其自己的-W选项单独列出)。

看起来您能做的最好的事情就是将库的使用隔离到您禁用或根本不使用的一个文件,然后单独启用其所有组件(从该链接)-Wextra-Wextra