考虑一下:
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'
我一生都被教导过,构造函数什么都不返回!而现在看来,它实际上返回了一个对象。我完全被吹走了,请解释一下,这里发生了什么
答案 0 :(得分:1)
return MyClass();
不是对构造函数的调用。首先,因为该方法是static
而构造函数不是,所以如果不提供实例,您将无法调用它。其次,你不能直接调用构造函数。
MyClass()
创建一个MyClass
类型的临时变量(隐式调用构造函数)。您可以在MyClass
之外调用相同的代码。
答案 1 :(得分:0)
在C ++中,构造函数具有它所在类的评估类型,并且不需要return
语句。通过在括号中指定类型和参数(例如MyClass()
)来简单地调用它。也就是说,许多语言都有“命名构造函数”,这种模式可以使用{em> static
一个新实例的return
成员函数在C ++中实现 - 因此有一个评估封闭类的类型。这就是我们在这里观察到的:MyClass::test()
是一个命名的构造函数。它不是严格语言语法的构造函数,因为它必须在实现中调用另一个构造函数;但它是一个构造函数,它返回一个新的类实例。