Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11委托构造函数和类型定义_C++_C++11_Visual Studio 2013 - Fatal编程技术网

C++11委托构造函数和类型定义

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不支持继承构造

我试图在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不支持继承构造函数

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构造函数,它就可以工作。。。。