C ++悬空const引用临时对象

时间:2013-09-05 11:17:23

标签: c++ reference boost-filesystem

为什么以下代码中存在悬空引用?我认为对const的引用总是将临时的寿命延长到它们的范围。

boost::filesystem::recursive_directory_iterator it(dir_name);
const std::string& extension = it->path().extension().string();
std::cout << extension << std::endl; // error, dangling reference

2 个答案:

答案 0 :(得分:13)

来自class path的{​​{3}}:

  

被描述为返回const string的成员函数被允许返回const string&

因此无法保证string()实际返回临时字符串。它可能是对path返回的临时extension()内的字符串的引用;将延长其生命周期,因为它直接绑定到本地参考。

答案 1 :(得分:2)

不要让extension成为常规参考。这样做:

const std::string extension = it->path().extension().string();