首页 > 解决方案 > 为什么延长寿命在这里的工作方式不同?

问题描述

我正在观看此视频(时间戳),并且此代码表现出未定义的行为。

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 进行全面评估吗?

另外,不知道如何命名这个问题,或者确切搜索什么,请告诉我,以便我下次可以更好地搜索资源。谢谢。

标签: c++

解决方案


推荐阅读