我开始知道
S{}.rval
是一个左值表达式。我想知道将其视为左值表达式背后的基本原理。
为什么要访问引用类型左值的非静态成员,即使该对象是右值?
struct S {
int val;
int& rval = val;
};
int main() {
S{}.val; // xvalue
S{}.rval; // lvalue
}
我的期望是,提到“即将消亡的实体”也将是“即将消亡”。 所以我想了解规则的基本原理。
我的期望是,提及“即将消亡的实体”也将是“即将消亡”。
事实并非总是如此。引用成员 可能会为一个比临时对象
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{}`
}