C++悬空的常量引用临时对象

C++ dangling const reference to a temporary object

本文关键字:引用 临时对象 常量 C++      更新时间:2023-10-16

为什么下面的代码中有一个悬空的引用?我认为对 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()实际上返回临时字符串。它可以是对 extension() 返回的临时path内字符串的引用;这不会延长其生存期,因为它直接绑定到本地引用。

不要extension const ref。请改为执行以下操作:

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