参考临时成员

问题描述

考虑以下代码

${NodeID}

以上是格式良好的代码还是UB?

我怀疑 ${EventID} 返回的引用在最后一个分号处悬空。但此时 #include <vector> struct temp { int& get() { return i; } int i = 1; }; int main() { std::vector<int> v; v.push_back(temp{}.get()); } 已经被求值,所以没问题,不是吗?

解决方法

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