对象或引用的一部分
Part of an object or reference
假设类A有一个成员变量(它是一个对象而不是一个引用(m.自然我会认为:当我定义一个对象"o1"时,表达式"o1.m"也是一种对象类型;当我定义引用"q1"时,表达式"q1.m"也是一种引用类型。
这个结论正确吗?我想知道标准文档中的任何相关子句C++如果它是真的(我已经搜索了它/它们一天了,但到目前为止几乎得到了所有关于"作为类成员的参考"(?
看看 §5.2.5(后缀表达式中的类成员访问,来自 N3797 C++14 草稿(:
将后缀 expression.id 表达式缩写为 E1。E2,E1称为对象表达式。E1 的类型和值类别。E2 确定如下。在 5.2.5 的其余部分,cq 表示常量或不存在常量,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 是常量,则 CQ12 是常量。如果 E2 声明为可变成员,则 E1 的类型。E2 是"vq12 T"。如果 E2 未声明为可变成员,则 E1 的类型。E2 是 "cq12 vq12 T"。
该标准没有说明 E2 成为参考,即使 E1 是。明确地说,如果 E1 是引用类型而 E2 不是,则为 E1。E2 不是引用类型。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 我可以在循环中引用 std::string 的一部分并将其放在外面吗?
- C++的新手,程序在取消引用向量的一部分时没有响应
- 对象或引用的一部分
- 清楚地说明 * 和 & 作为类型的一部分和作为取消引用/address_of操作符之间的区别
- 引用从end()中减去的std::向量的一部分可以吗
- 引用静态函数作为类定义的一部分是否有任何开销?
- 作为boost::bind复合链的一部分的解引用迭代器
- C# 通过引用将数组的一部分作为函数的参数传递