引用作为函数返回值的问题??

liuchang2859 2002-04-05 02:54:25
int&square(int i)
{
int t=i*i;
return t;
}
int&square1(int i)
{
return i*i;
}
后面这个通不过,为什么?
引用作为函数返回值,函数里应该返回对象还是返回对象地址
还是两者都可以?
...全文
426 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
北极猩猩 2002-04-07
  • 打赏
  • 举报
回复
引用需要用变量来初始化。
而i*i不回生成一个新变量,只是得到一个值
sarage 2002-04-07
  • 打赏
  • 举报
回复
长知识
项目管理PMO 2002-04-07
  • 打赏
  • 举报
回复
第一个程序也不正确,不应该返回一个非静态的局部变量的引用。
挺拔的劲松 2002-04-07
  • 打赏
  • 举报
回复
return (i*i)这样应该可以。


函数里应该返回对象
reven_zl 2002-04-07
  • 打赏
  • 举报
回复
看看thinking in c++中得一个例子吧,直接返回t肯定有错

——————————————————————————
int& h() {
int q;
// return q; //error
static int x;
return x; //safe; x lives outside scope

}
——————————————————————————

关于函数返回值是引用的情况,建议看一下钱能的书192页到195页,讲得很清楚
dixzhang 2002-04-07
  • 打赏
  • 举报
回复
第一个函数是可以的,t是一个局部变量,不是临时变量,
所以可以作为int的引用来返回。
MasterGo 2002-04-05
  • 打赏
  • 举报
回复
引用只是给变量或对象起个别名
并不牵扯到地址问题
fangrk 2002-04-05
  • 打赏
  • 举报
回复
afsfop:
第一个函数:Attempting to return a reference to local variable
就算编译通过了,也得不到答案的
可以用:
const int & square(int i)
{ static int t=i*i;
return t;
}
但没有这种必要
shornmao 2002-04-05
  • 打赏
  • 举报
回复
to afsfop() :

难道只要编译通过就是正确的程序了吗?
如果你还抱着这样的想法,我劝你不要研究这些具体的语言机制了,你还是好好学学更基础一些的东西吧。
这种行为就像指针的错误使用一样,编译器无法识别,但是他的结果是没有定义的。这里的结果应该是运行时的堆栈错误。
C++的设计理念就是尽量避免意外的失误,而不是防止故意的欺骗,这种代码就属于故意的欺骗。
fangrk 2002-04-05
  • 打赏
  • 举报
回复
两个都不能通过!
t,i*i是零时变量,出了函数就没有定义了!
引用,应该针对一个确切存在的object
prototype 2002-04-05
  • 打赏
  • 举报
回复
引用作为函数返回值,函数里应该返回对象.

but both of your functions are wrong, because 't' and the result of 'i*i' are temporay objects. when you quit from the functions, their addresses are released automatically for other uses, which means the objects disappear. so you can not have references for these non-existant objects.

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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