我很难理解这段代码(来自 C++14 草案标准[conv.lval]的示例)如何为g(false)
. 为什么constexpr
使程序有效?
另外,“不访问y.n
”是什么意思?在对我们的两次调用中,g()
我们都返回了n
数据成员,那么为什么最后一行说它不访问它呢?
struct S { int n; };
auto f() {
S x { 1 };
constexpr S y { 2 };
return [&](bool b) { return (b ? y : x).n; };
}
auto g = f();
int m = g(false); // undefined behavior due to access of x.n outside its
// lifetime
int n = g(true); // OK, does not access y.n