Oersted Asked: 2024-07-23 22:20:52 +0800 CST2024-07-23 22:20:52 +0800 CST 2024-07-23 22:20:52 +0800 CST 表达式 class{}.refmem 作为左值表达式的理由是什么 772 我知道这是S{}.rval一个左值表达式。我想知道将其视为左值表达式背后的理由。 为什么可以访问引用类型左值的非静态成员,即使对象是右值? struct S { int val; int& rval = val; }; int main() { S{}.val; // xvalue S{}.rval; // lvalue } 我原本以为“即将消亡的实体”的提法也会是“即将消亡”。所以我想了解这些规则的原理。 c++ 1 个回答 Voted Best Answer user12002570 2024-07-23T22:33:01+08:002024-07-23T22:33:01+08:00 我的预期是,“即将死亡的实体”的提法也是“即将死亡”。 但情况并不总是如此。引用成员可能会为一个比临时对象存活时间更长的对象设置别名 S{}。 例如: int i = 10; struct S { int& rval = i; // rval refers to the global i }; int main() { S{}.rval; //the aliased object will outlive the object expression `S{}` }
但情况并不总是如此。引用成员可能会为一个比临时对象存活时间更长的对象设置别名
S{}
。例如: