如果 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/