对于第一个选项(点),第一个表达式应为glvalue 拥有完整的班级类型。对于第二个选项(箭头)第一个 expression应该是一个 prvalue ,它具有指向完整类类型的指针。 表达式E1-> E2被转换为等价形式(*(E1))。E2; [expr.ref]的其余部分仅解决第一个选项 (点).68在任何一种情况下,id-expression都应该命名一个成员 类或其基类之一。 [注意:因为一个名字 class被插入其类范围(Clause [class]),一个名称 class也被认为是该类的嵌套成员。 - 结束说明] [注意:[basic.lookup.classref]描述了如何查找名称 之后 。和 - >运营商。 - 结束说明]
在下面的代码段中,p->f()
是后缀表达式,p
是左值。
struct A{ void f(){} };
A *p = new A;
int main(){
p->f();
}
答案 0 :(得分:3)
每当需要prvalue但给出glvalue时,glvalue可以通过左值到右值转换 [conv.lval]转换为prvalue。因此,prvalues相当普遍且容易获得。