使用默认参数继承构造函数:哪个编译器是正确的?

时间:2014-09-11 08:30:27

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

在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是否有任何已知的解决方法(除了再次明确指定构造函数)?

1 个答案:

答案 0 :(得分:5)

gcc编译器是正确的。

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