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

liz*_*isk 1 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
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 13

文档class path:

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

因此无法保证string()实际返回临时字符串.它可能是对临时path返回的字符串的引用extension(); 将具有它的寿命延长,因为它直接键合到一个本地参考.