c++ - 如何通过复制从函数返回引用

标签 c++ dictionary

如果 map 中存在 key,我有一个返回 value 的函数,例如:

map<int,string> mymap;
//Assume there are some key value pair in above map

string & ReturnKey(int &a)
{
    string ret;
    map<int,string>::iterator iter = mymap.find(a);
    if(iter not_eq mymap.end())
    {
        ret = iter->second;//I think this will make copy
    }
    else
    return ret;
}

如何避免复制从上述函数返回的字符串?

最佳答案

如果您认为返回的引用是常量,您可以这样做:

const string & ReturnKey(int a)
{
  static const string defaultValue;  // to be returned if object isn't found
  map<int,string>::iterator iter = mymap.find(a);
  if(iter != mymap.end())
  {
     return iter->second;
  }
  else return defaultValue;

在未找到的情况下返回对 (defaultValue) 的引用是安全的,因为 defaultValue 被声明为静态的,因此在函数返回后仍然存在。在发现值的情况下,调用者需要注意不要保留引用并在清除或修改 mymap 后尝试使用它,但这在实践中通常不是问题。

关于c++ - 如何通过复制从函数返回引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21898877/

相关文章:

python - 无法从字典创建 pd.Series |类型错误 : 'values' is not ordered

python - 将具有多个值的键映射到python中的json

c++ - 模板类 c 中的析构函数 : How to delete field which may be pointer or not pointer?

c++ - undefined symbol : vtable

C++多维 vector

javascript - map 调用中的冒号在 Javascript 中意味着什么

c++ - Box2D:程序在破坏 b2Body 时崩溃

C++ 初始化非常大的常量数组,最佳实践

java - 迭代英语词典所有单词的来源

ios - 类型为 'AnyObject' 的非可选表达式用于检查可选值