构造函数返回什么?

Inv*_*ulk 10 c++ constructor return-type

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

struct empty{};

int main(){
   empty(); //creates a temporary and implicitly a constructor is called
}
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*lis 31

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

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

  • 添加到"你实际上不能调用构造函数" - 有时,有理由想要在已经分配的内存中构造一个对象.显式调用构造函数的想法可能很有吸引力 - 但实际上即使这样也行不通.而是使用"placement new"语法.虽然略有不对称,但补充此操作的清理操作(破坏对象但不释放内存)是一个显式的析构函数调用 - 而不是"放置删除". (2认同)

小智 8

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

*this;
Run Code Online (Sandbox Code Playgroud)

这是怎么用的?

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