迭代器 引用

ffvcff 2009-05-30 01:00:13
const set<TextQuery::line_no>& TextQuery::run_query(const string &query_word)const
{
map< string,set<line_no> >::const_iterator
loc=word_map.find(query_word);
if(loc==word_map.end())
return set<line_no> ();
else
return loc->second;
}
map<std::string,set<line_no> > word_map; 类的数据成员
现在的问题是:
大家都知道不能返回一个局部对象的引用 map< string,set<line_no> >::const_iterator loc=word_map.find(query_word); 这里的locs是一个const类型的迭代器,是一个局部变量吧 现在返回的是一个局部变量引用 程序竟然能够跑起来 运行正确
为什么这里能够返回一个局部对象的引用啊 很是不解
在线等待
大家帮帮忙 分不是很多了 不好意识
...全文
171 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hz_yck 2009-05-30
  • 打赏
  • 举报
回复
cosnt 引用 和 引用不太一样
const 引用还可以引用临时变量

const int & a(1+2);
const int & b(1.2);

局部变量和临时变量的const引用编译器会产生一个const的变量再付给const引用

因为是const的,所以没有操作时操作的是原值还是中间变量的问题
pengzhixi 2009-05-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ffvcff 的回复:]
引用 1 楼 tianya0609 的回复:
loc是局部变量,但是loc->second所值的那个内容单元是原来的map的,所以就可以说不是局部变量了。

return set <line_no> (); //set<line_no>是map键值对里面的值,它不是局部变量。
那这个set对象不是局部的吗?
[/Quote]
而且你返回的也不是跌代器
bigc2000 2009-05-30
  • 打赏
  • 举报
回复
loc 被返回时,里面的first,second指向原来map中的元素,当然没用错误!
ffvcff 2009-05-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lzh9955 的回复:]
STL
[/Quote]
啥意思 能说说嘛
lzh9955 2009-05-30
  • 打赏
  • 举报
回复
STL
ffvcff 2009-05-30
  • 打赏
  • 举报
回复
自己顶
jn989 2009-05-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ffvcff 的回复:]
引用 1 楼 tianya0609 的回复:
loc是局部变量,但是loc->second所值的那个内容单元是原来的map的,所以就可以说不是局部变量了。

return set <line_no> ();
那这个set对象不是局部的吗?
[/Quote]
是局部的,但却是空的对象,操作空对象前一般要检查的,为空不做处理,所以应该没问题
ffvcff 2009-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tianya0609 的回复:]
loc是局部变量,但是loc->second所值的那个内容单元是原来的map的,所以就可以说不是局部变量了。
[/Quote]
return set <line_no> ();
那这个set对象不是局部的吗?
tianya0609 2009-05-30
  • 打赏
  • 举报
回复
loc是局部变量,但是loc->second所值的那个内容单元是原来的map的,所以就可以说不是局部变量了。

64,645

社区成员

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

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