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

Return type of a constructor in c++

本文关键字:返回类型 构造函数 C++      更新时间:2023-10-16

我正在学习 c++,我遇到了以下代码段:

class X
{
    int i;
public:
    X(int ii = 0);
    void modify();
};
X::X(int ii)
{ i = ii; }
void X::modify()
{ i++; }
X f5()
{ return X(); }
const X f6()
{ return X(); }
void f7(X& x) // Pass by non-const reference
{ x.modify(); }
int main()
{
    f5() = X(1);
    f5().modify();
}

我特别被困在这个部分——

X f5()
{ return X(); }

这部分代码是否按值返回类型 x 的对象?构造函数可以返回对象吗?

这部分代码是否按值返回类型 x 的对象?

是的,它创建并值初始化类型为 X 的临时对象(通过调用默认值为零的构造函数)并返回该对象。

构造函数可以返回对象吗?

不,这没有任何意义。但是像X()这样的转换表达式。

f5只是函数,而不是构造函数。它返回类型为 X 的构造对象。

很简单,你误解了类和函数的构造函数。 你的类class X有一个构造函数,它是X(int ii = 0);的。

X f5()不是构造函数。首先要清楚地了解这一点。

的构造函数应与类同名,并且没有返回值。这没有任何意义。(进一步阅读有关类和构造函数的信息)

X f5() {
  return X();
}

这是一个返回X类型的对象的函数。 它返回 X()。

X()创建一个类型为 X 的值初始化临时对象。