【问题标题】:Reference to a member of temporary引用临时成员
【发布时间】:2021-07-17 00:51:02
【问题描述】:

考虑以下代码:

#include <vector>

struct temp {
    int& get() { return i; }
    int i = 1;
};

int main() {
    std::vector<int> v;
    v.push_back(temp{}.get());
}

上述格式正确的代码还是UB?

我怀疑从get() 返回的引用,它在最后一个分号处悬空。但是此时push_back 已经被评估了,所以没关系,不是吗?

【问题讨论】:

    标签: c++ reference temporary-objects


    【解决方案1】:

    临时变量存在到完整表达式的末尾。在这种情况下,这意味着在push_pack 返回之后。由于push_back 复制了get 引用的值,因此没有悬空引用,一切都会按预期工作。

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 2016-05-20
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      • 2021-02-05
      相关资源
      最近更新 更多