为什么下面的代码中有一个悬空引用?我认为对 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
为什么下面的代码中有一个悬空引用?我认为对 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
从文档中class path
:
被描述为返回的成员函数
const string
被允许返回const string&
所以不能保证string()
实际返回一个临时字符串。path
它可能是对临时返回的字符串的引用extension()
;这不会延长其生命周期,因为它没有直接绑定到本地引用。
不要做extension
一个 const ref。改为这样做:
const std::string extension = it->path().extension().string();