Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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++_Constructor_History - Fatal编程技术网

C++ 为什么我们不能从构造函数返回任何东西?

C++ 为什么我们不能从构造函数返回任何东西?,c++,constructor,history,C++,Constructor,History,C++说我们不能从构造函数返回任何东西?背后的历史原因是什么? 为什么Bjarne不允许构造函数返回与任何其他成员函数不同的内容?构造函数只能产生对象本身…我认为构造函数是返回自身,但不必有返回语句 如果它返回自身,那么它就不能返回其他任何东西。我不能代表Bjarne,但看待构造函数的惯用方式是它返回它构造的对象 因为当在新语句或变量初始值设定项中构造对象时,返回的对象就是正在构造的新对象。对于从构造函数返回的对象,您会怎么做?它在任何地方都无法归还;返回的是正在构造的对象。在调用构造函数之前,

C++说我们不能从构造函数返回任何东西?背后的历史原因是什么?
为什么Bjarne不允许构造函数返回与任何其他成员函数不同的内容?

构造函数只能产生对象本身…

我认为构造函数是返回自身,但不必有返回语句


如果它返回自身,那么它就不能返回其他任何东西。

我不能代表Bjarne,但看待构造函数的惯用方式是它返回它构造的对象

因为当在新语句或变量初始值设定项中构造对象时,返回的对象就是正在构造的新对象。对于从构造函数返回的对象,您会怎么做?它在任何地方都无法归还;返回的是正在构造的对象。在调用构造函数之前,该对象已经部分创建。否则,构造函数将没有对象可处理,并且它必须是构造函数返回的对象,因此,让用户返回它或让他们尝试返回不同的东西来混淆自己是没有意义的。

除了让构造函数返回一些东西会让构造函数做两件事,而不仅仅是一件通常不希望做的事之外,请注意,构造函数不能命名,因此无法显式调用它们

由于不可能构造一个显式调用构造函数的表达式,因此在任何情况下都不可能赋值或引用构造函数的返回值

试图从构造函数返回一些东西根本不符合语言设计

构造函数不返回对象,而是在调用它们的内存区域中初始化对象。如果声明类类型的对象具有静态存储持续时间,并且该类型具有用户声明的构造函数,则内存将保留给程序的生命周期,并且实现将确保调用构造函数在程序中的适当时间在该位置初始化对象

类似地,如果使用自动存储持续时间声明和对象,则实现会非正式地保留一些堆栈空间,并在每次执行声明语句时调用构造函数

对于新表达式,内存是动态分配的,实现调用适当的构造函数来初始化对象

请注意,如果X是一个类类型,那么所有这些语句中的X总是引用类型的名称,而不是实际上没有名称的构造函数。声明或定义构造函数的语法是特殊的,并不意味着构造函数有名称。假设X有一个用户声明的构造函数

X x; // Initialize an object of type X using the default constructor

X(); // Value initialize a temporary of type X. Not an explicit constructor call.

new X(); // new expression: value-initialize a dynamically allocated X

X(a); // A function style cast

X(a, b); // Construct an X from the expression list. X must have a
         // suitable constructor but the X still refers to the type.

构造函数没有RETURN类型,因为它已经将reference\u id返回到reference variable,该变量作为ex的对象调用:- Emp e1=新的empreference\u id 这里Emp是类名 e1是参考变量 新的用于动态分配 Emp是Emp类的构造函数
在这种情况下,构造函数将reference\u id返回到reference变量e1

您会返回什么?您有什么理由建议从构造函数返回某些内容?我会说它没有意义,这就是为什么它不返回该类的某个对象。我知道这是含蓄的,但为什么?我知道这是含蓄的。完成。你已经回答了你自己的问题。太好了。您将如何收到返回值?构造函数不是像函数一样被调用的:因此术语-constructorfair就足够了。接受你的答案,也考虑暂时性——STD::StrugHELLO,Word。这既不是一个新语句,也不是一个变量初始值设定项,因此您可以简单地想象它可能返回一个不同的对象。但是,对象占用的内存并不是由构造函数提供的,除了为临时对象创建的堆栈空间之外,没有任何合理的方法可以将对象放在任何其他地方,最好不要将其视为对构造函数的调用。