在c ++中返回构造函数的类型

时间:2015-04-29 11:07:05

标签: c++ constructor return return-type

我正在学习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类型的对象?构造函数可以返回一个对象吗?

3 个答案:

答案 0 :(得分:4)

  

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

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

  

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

不,这没有任何意义。但是像[{1}}这样的转化表达式确实存在。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

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

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

X f5() {
  return X();
}

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

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