C++11委托构造函数和类型定义
我试图在visual studio 2013社区版中编译一些代码,但我遇到了问题:以下代码拒绝编译C++11委托构造函数和类型定义,c++,c++11,visual-studio-2013,C++,C++11,Visual Studio 2013,我试图在visual studio 2013社区版中编译一些代码,但我遇到了问题:以下代码拒绝编译 struct X { X(double y); }; typedef X Z; struct Y : public Z { using Z::Z; }; 问题是使用Z::Z的行。它给了我一个错误C2039:“Z”:不是“X”的成员 这个代码有效吗?还是这是一只虫子 您使用的功能是继承构造函数,而不是委派构造函数。根据,VS 2013 RTM不支持继承构造
struct X
{
X(double y);
};
typedef X Z;
struct Y : public Z
{
using Z::Z;
};
问题是使用Z::Z的行。它给了我一个错误C2039:“Z”:不是“X”的成员
这个代码有效吗?还是这是一只虫子 您使用的功能是继承构造函数,而不是委派构造函数。根据,VS 2013 RTM不支持继承构造函数 VS2013确实支持委托构造函数,但一个构造函数将成员初始化委托给另一个构造函数是不同的特性。这将是一个例子:
struct X
{
int i;
X(int i) : i(i) {}
X() : X(42) {} // delegating constructor
};
如果需要在不支持继承构造函数的编译器中继承构造函数,可以通过定义一个完全转发的构造函数来创建一个变通方法。它的效果不是100%相同,但对于大多数用途来说应该足够好:
struct Y : X
{
template <class... Arg>
Y(Arg &&... arg) : X(std::forward<Arg>(arg)...) {}
};
它将不具有与基类构造函数相同的noexcept特性,但VS 2013也不支持noexcept。您使用的功能是继承构造函数,而不是委派构造函数。根据,VS 2013 RTM不支持继承构造函数 VS2013确实支持委托构造函数,但一个构造函数将成员初始化委托给另一个构造函数是不同的特性。这将是一个例子:
struct X
{
int i;
X(int i) : i(i) {}
X() : X(42) {} // delegating constructor
};
如果需要在不支持继承构造函数的编译器中继承构造函数,可以通过定义一个完全转发的构造函数来创建一个变通方法。它的效果不是100%相同,但对于大多数用途来说应该足够好:
struct Y : X
{
template <class... Arg>
Y(Arg &&... arg) : X(std::forward<Arg>(arg)...) {}
};
它将不具有与基类构造函数相同的noexcept特性,但是VS 2013也不支持noexcept。感谢精度,现在我确切地知道了继承构造函数和委托构造函数之间的区别。我正在使用VS 2013社区版,这是一个非常新的版本,它似乎至少部分支持内置构造函数,因为如果Y派生自X类并继承自X构造函数,它就可以工作……由于精度的原因,现在我确切地知道了继承构造函数和委派构造函数之间的区别。我正在使用VS2013社区版,这是一个非常新的版本,它似乎至少部分支持内置构造函数,因为如果Y派生自X类并继承自X构造函数,它就可以工作。。。。