谁能帮我看一下,例子程序的一行语句没看明白!

vcppman 2005-12-04 12:25:26
是MAIN中的第一行语句.f5() = X(1);
f5()是定义的一个函数,怎么能够把一个对象赋给一个函数呢?
谢谢. 下面附上这一小段程序.

--------------------------------

class X {
int i;
public:
X(int I = 0) : i(I) {}
void modify() { i++; }
};

X f5() {
return X();
}

const X f6() {
return X();
}

void f7(X& x) { // Pass by non-const reference
x.modify();
}

main() {
f5() = X(1); // OK -- non-const return value
f5().modify(); // OK
f7(f5()); // OK
// Causes compile-time errors:
//! f6() = X(1);
//! f6().modify();
//! f7(f6());
}
...全文
117 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
greenteanet 2005-12-11
  • 打赏
  • 举报
回复
注意一下const和非const的区别。还有要注意返回值的类型。
vcppman 2005-12-04
  • 打赏
  • 举报
回复
啊,我知道了

f5()返回了一个临时的对象, X(1)也是一个对象

这行语旬是把X(1)这个对象赋给f5()产生的那个临时对象.

应该是这样理解对吗?
QuestionMark_zhang 2005-12-04
  • 打赏
  • 举报
回复
f5()调用了X的构造函数,并且返回值是X类型的
所以f5()的结果就是一个X的对象
SnowwhiteYqw 2005-12-04
  • 打赏
  • 举报
回复
楼主,第三个错误是因为f6()返回的是const类型的X,所以不能传给非const的引用。
SnowwhiteYqw 2005-12-04
  • 打赏
  • 举报
回复
f6()返回的是constX类型,所以f6() = X(1);会有错。
因为它返回的是const类型的X对象(临时的)。所以它只能调用const的成员函数。
而modify()不是const修饰的成员函数,所以会有错。临时对象不能引用调用。
所以! f7(f6());有错。

楼主如果觉得我说的对的话,就给我加分吧。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧