关于函数返回引用的问题

ck_chuyun 2003-07-13 03:39:01
C++ Primer中说程序员应当知道下面一个易犯的错误:

********************************************************************

1、返回一个指向局部对象的引用

但我看不明白下面的例子
Matrix& grow( Matrix* p )
{
matrix *res;
// 在动态存储中分配一个更大的Matrix
// res是指向新Matrix的指针
// 将*p内容复制到*res
return *res;
}
res不是一个局部对象吗?不明白???这个例子好像错了???函数定义
返回值为Matrix&,可函数却返回了一个指针????怎么回事????

既然不能返回指向局部对象的引用,那返回值是不是只能定义为全局或者向下
面的情况,函数的形参为引用类型,是不是这样子?
const int &get_val( vector<int> &vi, int ix )
{
return vi[ix];
}

*********************************************************************

还有一个小问题?
#include <iostream>
#include <vector>

using namespace std;

#pragma warning(disable: 4786)

int ai[4] = {0, 1, 2, 3};
vector<int> vec( ai, ai+4 );

int main()
{
vector<int> vec( ai, ai+4 );

return 1;
}
我写了两个相同的定义vector<int> vec( ai, ai+4 ); 为什么可以通过运行?
...全文
15 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jinhao 2003-07-13
  • 打赏
  • 举报
回复
grow 返回的对象就是 res指向的那玩意儿。
第二个是作用域不同。
ck_chuyun 2003-07-13
  • 打赏
  • 举报
回复
谢谢两位
cdocument 2003-07-13
  • 打赏
  • 举报
回复
这是由于C++的namaspace 命名空间保护的缘故。就像这个例子
int a;
while()
{
int a;
}
由于两个东东的作用域不一样。在C++中:
namespace IMB
{
int a;
namespace INIBM
{
int a;
}
}
访问时: IBM::a 表示前一个a
IBM::INIBM::a 表示后一个a;
ck_chuyun 2003-07-13
  • 打赏
  • 举报
回复
谢谢楼上的!!点醒了我
idontlikenickname 2003-07-13
  • 打赏
  • 举报
回复


return *res;返回的不是指针,
res是个指针,但是已经使用*解除指针引用了~
return res;才使返回指针.

69,369

社区成员

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

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