构造函数会返回什么吗?

时间:2016-08-27 12:55:17

标签: c++

考虑一下:

class A {
  public:
    static A test(){
      return A::A();
    }
};

void main(){
  A a = A::test();
}

它编译!

更新NO.ONE

好的,现在让我们编辑一下这段代码:

class A {
  public:
    static int test(){
      return A::A();
    }
};

void main(){
  int a = A::test();
}

不编译,这是错误

  

错误C2440:'return':无法从'A'转换为'int'

我一生都被教导过,构造函数什么都不返回!而现在看来,它实际上返回了一个对象。我完全被吹走了,请解释一下,这里发生了什么

2 个答案:

答案 0 :(得分:1)

return MyClass();不是对构造函数的调用。首先,因为该方法是static而构造函数不是,所以如果不提供实例,您将无法调用它。其次,你不能直接调用构造函数。

MyClass()创建一个MyClass类型的临时变量(隐式调用构造函数)。您可以在MyClass之外调用相同的代码。

答案 1 :(得分:0)

在C ++中,构造函数具有它所在类的评估类型,并且不需要return语句。通过在括号中指定类型和参数(例如MyClass())来简单地调用它。也就是说,许多语言都有“命名构造函数”,这种模式可以使用{em> static 一个新实例的return成员函数在C ++中实现 - 因此有一个评估封闭类的类型。这就是我们在这里观察到的:MyClass::test()是一个命名的构造函数。它不是严格语言语法的构造函数,因为它必须在实现中调用另一个构造函数;但它是一个构造函数,它返回一个新的类实例。

相关问题