return type of the constructor in C++

早过忘川 提交于 2019-12-21 03:34:22

问题


I know that there is no return type of the constructors in C++

However, the code below compiles right. What is returned by the constructor in the code below?

class A{

public:
A() {}
}


A a = A();      //what is returned by A() here, why?

Is there any conflict here?


回答1:


Nothing is returned from the constructor. The syntax A() is not a constructor call, it creates a temporary object of type A (and calls the constructor in the process).

You can't call a constructor directly, constructors are called as a part of object construction.

In your code, during the construction of the temporary the default constructor (the one you defined) is called. Then, during the construction of a, the copy constructor (generated automatically by the compiler) is called with the temporary as an argument.

As Greg correctly points out, in some circumstances (including this one), the compiler is allowed to avoid the copy-construction and default-construct a (the copy-constructor must be accessible however). I know of no compiler that wouldn't perform such optimization.




回答2:


The syntax T(), where T is some type, is a functional-cast notation that creates a value-initialized object of type T. This does not necessarily involve a constructor (it might or it might not). For example, the int() is a perfectly valid expression and type int has no constructors. In any case, even if type T has a constructor, to interpret T() as "something returned from constructor" is simply incorrect. This is not a constructor call.



来源:https://stackoverflow.com/questions/2391233/return-type-of-the-constructor-in-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!