【问题标题】:Return type of a constructor in c++c++中构造函数的返回类型
【发布时间】:2015-07-08 15:07:01
【问题描述】:

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

【问题讨论】:

    标签: c++ constructor return return-type


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这是我一直在寻找的答案 谢谢!!。还有一个疑问,“价值结构”是什么意思?对象是类的实例,对象的值是什么。 inbuild 类型的值像 int i=15 一样有意义,但用户定义类型对象的值可能是什么?
    • @theindividual:对于这样的类,有默认构造函数,值初始化调用默认构造函数;所以i 将为零。对于其他类型,它会将它们初始化为零。
    【解决方案2】:

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

    【讨论】:

    • 谢谢。我知道 f5() 是函数。那么返回 x() 呢?似乎 x() 有返回类型? X 是这里的构造函数?
    • @theindividual return X() 表示构造X 类型的临时变量并返回它的副本。
    【解决方案3】:

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

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

    类的构造函数应该与类同名并且没有返回值。确实,没有任何意义。 (进一步了解类和构造函数)

    X f5() {
      return X();
    }
    

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

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

    【讨论】:

    • 是的,我知道,f5 不是构造函数。 x() 是构造函数。我不明白的两个语句是 return x(),x() 是什么意思?第二个 f5()=x(1)
    • @个人:是的,我明白了。 X() 创建一个 X 类型的值初始化临时对象。它执行初始化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2019-09-03
    • 2019-08-08
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    相关资源
    最近更新 更多