1

为什么下面的代码中有一个悬空引用?我认为对 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
4

2 回答 2

13

文档class path

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

所以不能保证string()实际返回一个临时字符串。path它可能是对临时返回的字符串的引用extension();这不会延长其生命周期,因为它没有直接绑定到本地引用。

于 2013-09-05T11:27:10.307 回答
2

不要做extension一个 const ref。改为这样做:

const std::string extension = it->path().extension().string();
于 2013-09-05T11:22:01.397 回答