【发布时间】: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++