返回C ++中构造函数的类型

时间:2010-03-06 03:29:44

标签: c++ constructor

我知道C ++中没有返回类型的构造函数

但是,下面的代码编译正确。下面的代码中的构造函数返回了什么?

class A{

public:
A() {}
}


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

这里有冲突吗?

3 个答案:

答案 0 :(得分:17)

构造函数没有返回任何内容。语法A()不是构造函数调用,它创建类型为A的临时对象(并在进程中调用构造函数)。

你不能直接调用构造函数,构造函数被称为对象构造的一部分。

在您的代码中,在构造临时期间,将调用默认构造函数(您定义的构造函数)。然后,在构造a期间,使用临时作为参数调用复制构造函数(由编译器自动生成)。

正如Greg正确指出的那样,在某些情况下(包括这个),编译器可以避免copy-construction和default-construct a(但是复制构造函数必须是可访问的)。我知道没有编译器不会执行这样的优化。

答案 1 :(得分:4)

语法T(),其中T是某种类型,是一种函数转换符号,用于创建类型为T的值初始化对象。这不一定涉及构造函数(它可能或可能不会)。例如,int()是完全有效的表达式,类型int没有构造函数。在任何情况下,即使类型T具有构造函数,将T()解释为“从构造函数返回的内容”也是不正确的。这不是构造函数调用。

答案 2 :(得分:0)

我能提出的唯一可能的解释可能是编译器将代码扩展为:

A a = A();
/*
compiler generated code.
A a;
a.A::A();

a.A::~A();  destructor will also be inserted by compiler after "a" goes out of scope.
*/

P.S:我测试代码后未调用复制构造函数。