在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是否有任何已知的解决方法(除了再次明确指定构造函数)?
答案 0 :(得分:5)
gcc编译器是正确的。
正如您所提到的,应该生成一个,两个和三个参数的构造函数。