c++ - 为什么延长寿命在这里的工作方式不同?
问题描述
我正在观看此视频(时间戳),并且此代码表现出未定义的行为。
struct S {
std::vector<int> data{1, 2, 3, 4, 5};
const auto& get_data() const { return data; }
};
S get_s() { return S{}; }
int main() {
for (const auto &v : get_s().get_data()) {
std::cout << v;
}
}
他说扩展版for
就是这个,我理解。
auto && __range = get_s().get_data(); // This line
auto __begin = begin(__range);
auto __end = end(__range);
for (; __begin != __end; ++__begin()) {
std::cout << v;
}
自动 ref-ref 将延长由 返回的事物的生命周期,而
get_s
不是由返回的事物get_data
。
我认为他也没有说错,正如他继续说的那样
[...] 对 S 类型对象的悬空引用
为什么呢?在分配到 LHS 之前,不应该对 RHS 进行全面评估吗?
另外,不知道如何命名这个问题,或者确切搜索什么,请告诉我,以便我下次可以更好地搜索资源。谢谢。
解决方案
推荐阅读
- chat - 在 AIML 中与不同用户进行多次对话
- google-apps-script - 是否有替代 onEdit(e) 的方法?
- python - 在 Flask 应用程序中为 dash 应用程序创建 dockerfile
- c++ - 如何遍历可扩展散列结构的元素(特别是集合)
- arrays - 使用对象从数组发出 Laravel 请求
- java - WinAppDriver 如何在 Java 中定义一个 WindowsElement 而不会得到 java.lang.ClassCastException
- javascript - 正则表达式查找tml标签c#之外的任何文本
- python - 正则表达式提取包含三个元音的单词
- excel - 查找动态范围的列和行 VBA 的最小值、最大值和平均值
- c++ - 带有额外条件的 cin.fail C++