大家帮忙看一段代码

syd_programming 2005-05-16 12:23:25
代码段1:
void swap( int &, int & );
int manip( int i1, int i2 ) {
// ...
swap( i1, i2 );
// ...
return 0;
代码段2:
class B;
void takeB( B& );
B giveB();
int main() {
takeB( give() );
return 0;
}
段1是正确的,段2却是错误的,为什么?
...全文
72 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
angelanpan 2005-05-16
  • 打赏
  • 举报
回复
void takeB( B& );

改为

void takeB( const B& );就可以了

因为giveB()产生的是临时变量,是常量,不能变成非常量引用
gameslq 2005-05-16
  • 打赏
  • 举报
回复
up
lw1a2 2005-05-16
  • 打赏
  • 举报
回复
以下才是等同与段1的

class B
{
}
;
void takeB( B& )
{
}

void giveB(B& b)
{
takeB(b);
}


int main()
{
B b;
giveB(b);
return 0;
}
lw1a2 2005-05-16
  • 打赏
  • 举报
回复
class B;
void takeB( B& );
B& giveB();//这个函数很奇怪,既不是成员函数,又没提供参数,你想让他返回什么?
int main() {
takeB( giveB() ); //这里打错了
return 0;
}
Roaming_Sheep 2005-05-16
  • 打赏
  • 举报
回复
takeB( give() );

这里 give()返回的B对象是临时对象吧?跟这个有关?
jpq1982 2005-05-16
  • 打赏
  • 举报
回复
第一段的i1,i2在manip中是实际存在的变量, 只不过是局部于涵数的.
第二段真的是临时的(名字都没有:))
yesiloveyou 2005-05-16
  • 打赏
  • 举报
回复
学习...

65,189

社区成员

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

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