Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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++不使用父类构造函数? 我想知道为什么C++不能使用父类构造函数来指定签名,如果派生类忽略了这个值?_C++_Inheritance_Constructor_Initialization - Fatal编程技术网

为什么C++不使用父类构造函数? 我想知道为什么C++不能使用父类构造函数来指定签名,如果派生类忽略了这个值?

为什么C++不使用父类构造函数? 我想知道为什么C++不能使用父类构造函数来指定签名,如果派生类忽略了这个值?,c++,inheritance,constructor,initialization,C++,Inheritance,Constructor,Initialization,例如,在下面的示例中,我不能用std::string初始化dd对象 有人能解释一下吗?如果您也想继承构造函数,您需要在代码中告诉编译器: class Derived : public Base { public: using Base::Base; // <- Makes Base's constructors visible in Derived }; 至于我为什么要这样做?:廉价的答案是:因为标准上这么说 如果你不问问委员会成员自己,为什么会这样是猜测。他们很可能希望避

例如,在下面的示例中,我不能用std::string初始化dd对象


有人能解释一下吗?

如果您也想继承构造函数,您需要在代码中告诉编译器:

class Derived : public Base {
  public:
    using Base::Base;  // <- Makes Base's constructors visible in Derived
};
至于我为什么要这样做?:廉价的答案是:因为标准上这么说


如果你不问问委员会成员自己,为什么会这样是猜测。他们很可能希望避免意外或不直观的代码行为。

如果您也想继承构造函数,您需要在代码中告诉编译器:

class Derived : public Base {
  public:
    using Base::Base;  // <- Makes Base's constructors visible in Derived
};
至于我为什么要这样做?:廉价的答案是:因为标准上这么说


如果你不问问委员会成员自己,为什么会这样是猜测。他们很可能希望避免意外或不直观的代码行为。

我没有足够的rep标记为重复,但充分回答了这个问题


基本上,C++11之前的标准中不允许构造函数继承。C++11已经改变了这一点,您现在可以继承构造函数了。

我没有足够的rep标记为replicate,但足够回答这个问题


基本上,C++11之前的标准中不允许构造函数继承。C++11已经改变了这一点,您现在可以继承构造函数。

虽然使用std::string::std::string不起作用,但我需要了解这个问题的原因。为什么这里有继承的味道。@Emadpres请参阅std::string的有效语法。和我在回答中写的差不多我真的很惊讶。他们在标准中编写了一个特例,以使使用std::string::string之类的东西正常工作。回想一下,std::string实际上是std::basic_string的一种特殊类型的typedef……我认为我的编译器VS2012使用的是c++11之前的标准。谢谢你的回答。@BaummitAugen使用std::string::std::string不起作用,但我需要这个问题的原因。为什么这里有继承的味道。@Emadpres请参阅std::string的有效语法。和我在回答中写的差不多我真的很惊讶。他们在标准中编写了一个特例,以使使用std::string::string之类的东西正常工作。回想一下,std::string实际上是std::basic_string的一种特殊类型的typedef……我认为我的编译器VS2012使用的是c++11之前的标准。谢谢你的回答。@BaummitAugen.库特怎么样
class Derived : public Base {
  public:
    using Base::Base;  // <- Makes Base's constructors visible in Derived
};