为什么以下代码中存在悬空引用?我认为对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
答案 0 :(得分:13)
来自class path
的{{3}}:
被描述为返回
const string
的成员函数被允许返回const string&
因此无法保证string()
实际返回临时字符串。它可能是对path
返回的临时extension()
内的字符串的引用;将不延长其生命周期,因为它不直接绑定到本地参考。
答案 1 :(得分:2)
不要让extension
成为常规参考。这样做:
const std::string extension = it->path().extension().string();