对象或参考的一部分

时间:2014-12-07 17:01:56

标签: c++ reference-type member-variables

假设A类有一个成员变量(它是一个对象而不是一个引用)m。我自然会认为: 当我定义一个对象' o1'时,表达' o1.m'也是一种对象类型; 当我定义参考' q1'时,表达' q1.m'也是一种参考类型。

这个结论是否正确?我想知道C ++标准文档中的相关条款是什么,如果它是真的(我已经搜索了它/它们已经多了几天但几乎所有关于'引用作为类的成员& #39;到目前为止)?

1 个答案:

答案 0 :(得分:2)

查看§5.2.5 Postfix Expressions 中的类成员访问,来自N3797 C++14 Draft):

  

将postfix-expression.id-expression缩写为E1.E2,E1称为对象表达式。 E1.E2的类型和值类别确定如下。在5.2.5的其余部分中,cq表示const或不存在const,vq表示挥发性或不存在挥发性。 cv代表一个   任意一组cv限定符,如3.9.3中所定义。

     

如果声明E2具有“对T的引用”类型,那么E1.E2是左值; E1.E2的类型是T.否则,   适用以下规则之一。

     
      
  • 如果E2是非静态数据成员且E1的类型是“cq1 vq1 X”,并且E2的类型是“cq2 vq2 T”,则表达式指定由第一个表达式指定的对象的指定成员。如果E1是左值,则E1.E2是左值;否则E1.E2是一个x值。让符号vq12代表vq1和vq2的“联合”;也就是说,如果vq1或vq2是易失性的,则vq12是易失性的。同样,让符号cq12代表cq1和cq2的“联合”;也就是说,如果cq1或cq2是const,则cq12是const。如果E2被声明为可变成员,那么E1.E2的类型是“vq12 T”。如果E2未被声明为可变成员,则E1.E2的类型为“cq12 vq12 T”。
  •   

即使E1是,标准也没有说E2成为参考。明确地说,如果E1是引用类型而E2不是引用类型,则E1.E2不是引用类型。