C++悬空的常量引用临时对象
C++ dangling const reference to a temporary object
为什么下面的代码中有一个悬空的引用?我认为对 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();
相关文章:
- 为什么当我们有常量引用时创建临时对象?
- 返回对临时对象的引用
- 通过引用传递临时对象
- 存储对(可能)临时对象的引用是否合法,只要引用不比对象存活?
- 对临时对象的Const引用不会延长其生存期
- 为什么引用类型在使用临时对象访问时是左值
- 取消引用临时对象上的运算符
- 常量引用函数参数:是否可以禁止临时对象?
- 为什么临时对象可以绑定到常量引用?
- 为什么常量引用不能延长通过函数传递的临时对象的生存期?
- 使用常量引用延长临时对象的寿命
- 从函数返回引用是否会导致在使用'auto'时创建新的临时对象?
- 关于将临时对象传递给常量引用
- 将临时对象绑定到常量引用
- C++17:是编译器为(静态存储持续时间)const引用绑定创建的可修改的临时对象(和存储)
- 返回对本地临时对象 C++ 的引用
- 模板类型推导警告返回对本地临时对象的引用
- 为什么不对临时对象进行非常量引用
- 为什么我们可以非常量引用临时对象并延长其生命周期
- C++悬空的常量引用临时对象