构造函数返回什么?

时间:2010-11-23 04:06:16

标签: c++ constructor return-type

我的问题是构造函数返回了什么?这个问题与“构造函数的返回类型是什么?”没有什么不同。 我在某处读过构造函数返回一个完整的对象隐式(即隐式返回类型是类的名称),但不应明确指定。

struct empty{};

int main(){
   empty(); //creates a temporary and implicitly a constructor is called
}

因此,根据我的解释,隐式返回类型应该是类的名称,在本例中为empty。我的野性解释是否正确?

6 个答案:

答案 0 :(得分:30)

构造函数不返回任何内容。调用构造函数来初始化对象。构造函数只能用于初始化对象;你实际上不能显式调用构造函数(一方面,构造函数没有名称)。

在您给出的示例中,empty()不是函数调用表达式,而是值初始化。它创建一个值为empty的值初始化临时对象。

答案 1 :(得分:7)

构造确实会返回一些东西。它返回this指向的对象的引用。所以构造函数的隐式return语句看起来像

*this;

这是如何使用的?

如果使用“generic”类型创建something的类模板作为成员,则在您的构造函数中显式调用泛型类型的默认零参数构造函数(即generic())类something并通过something构造函数的赋值运算符和初始化语句初始化通用成员。构造函数必须返回一些东西,或者没有我刚刚编写的废话。它出现在我正在阅读的书中......哈哈。

答案 2 :(得分:4)

构造函数不返回任何内容 在创建对象时隐式调用构造函数来初始化正在创建的对象。

答案 3 :(得分:1)

  

构造函数不会返回任何内容。

混乱的来源:

Book *b = new Book();

许多人对上面的代码感到困惑,这会产生一个错觉,即构造函数返回一个指向新创建的对象的指针

当您使用new关键字时,编译器会分配所需的内存,然后调用构造函数在分配的内存上创建一个新对象。然后new返回指向该内存块的指针。构造函数只创建对象,永远不会返回任何内容。

答案 4 :(得分:0)

在C ++中,如果我没记错的话,你的代码将为堆栈上的“空”分配足够的空间,然后调用空的默认构造函数 - 由()指定 - 隐式传递给它一个这个引用。没有回报。在你的情况下,没有构造函数。

答案 5 :(得分:-1)

怎么样:

int main() {
const empty &er = empty();
empty *ep = const_cast<empty*>(er); //casting away conentness to make changes in the members
cout<<"\n main ends \n";
//dtor get called here
}

ctor返回一个对内存位置(* this)的const引用,你可以抛弃const并将其用作非empty *e = new e;

之类的非常规对象