【问题标题】:Inheriting constructors with default arguments: Which compiler is correct?使用默认参数继承构造函数:哪个编译器是正确的?
【发布时间】:2014-11-05 02:57:50
【问题描述】:

在 C++11 中,您可以从基类继承所有构造函数。构造函数继承对于默认参数的行为如何?

考虑以下代码:

struct Base
{
    Base(int x, int y=0, int z=0)
    {

    }
};

struct Derived : public Base
{
    using Base::Base;
};

int main() {
    Base B(1,2);
    Derived D(2,2);
    return 0;
}

这在 MSVC13 上无法编译,出现以下错误:

 ..\constructor_test\main.cpp(16) : error C2660: 'Derived::Derived' : function does not take 2 arguments

但是,它在 GCC 上运行良好(参见 http://ideone.com/nNmXHo)。所以我的问题是:

不应该生成一个、两个和三个参数的构造函数吗?哪个编译器在这里是正确的? MSVC13 还是 GCC? 如果 GCC 正确,MSVC 是否有任何已知的解决方法(除了再次明确指定构造函数)?

【问题讨论】:

  • 请看一下msdn.microsoft.com/en-us/library/…,其中明确指出 Visual Studio 不支持它(还)
  • 啊,谢谢!我只搜索了带有默认参数的构造函数继承的特殊情况,并错过了甚至不支持基本继承的事实。如果你这样回答,我会接受。

标签: c++ visual-c++ c++11 g++


【解决方案1】:

gcc 编译器是正确的。

正如您所提到的,应该生成一个、两个和三个参数的构造函数。

【讨论】:

  • 这在标准的 12.9/1 和 12.9/6 中有解释。
猜你喜欢
  • 2016-03-24
  • 1970-01-01
  • 2017-05-04
  • 2011-05-20
  • 2015-10-18
  • 2017-10-04
  • 2015-07-09
  • 1970-01-01
  • 2015-10-28
相关资源
最近更新 更多