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