以下代码是否会导致未定义的行为?
std::map<int, vector<int>> foo()
{
return ...
}
BOOST_FOREACH(const int& i, foo()[42])
{
std::cout << i << std::endl;
}
如果未定义,有什么好的方法可以修复它?如果我使用C++11范围for循环而不是BOOST_FOREACH会怎样?
std::map<...>::operator[]
返回一个左值引用(指向临时对象)而不是右值。因此,map
临时对象的生命周期没有得到正确延长,我们最终会得到一个指向虚无的引用。 - Matthieu M.