我的问题是构造函数返回了什么?这个问题与“构造函数的返回类型是什么?”没有什么不同。 我在某处读过构造函数返回一个完整的对象隐式(即隐式返回类型是类的名称),但不应明确指定。
struct empty{};
int main(){
empty(); //creates a temporary and implicitly a constructor is called
}
因此,根据我的解释,隐式返回类型应该是类的名称,在本例中为empty
。我的野性解释是否正确?
答案 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;