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

sky*_*oor 14 c++ constructor

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

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

class A{

public:
A() {}
}


A a = A();      //what is returned by A() here, why?
Run Code Online (Sandbox Code Playgroud)

这里有冲突吗?

ava*_*kar 18

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

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

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

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

  • `a a()`是函数的声明. (10认同)
  • 此外,即使`A`有另一个构造函数,比如说'A(int)`,代码`A a(1)`也不会直接调用构造函数而不是`new(&a)A(1) `是. (3认同)