C++ 中的箭头运算符“->”是什么?


点运算符和箭头运算符都是在 C++ 中用于访问类或结构的成员的。它们只是在不同的场景中使用。在 C++ 中,声明为类、结构或联合的类型被认为是“类类型”。因此,以下内容指代全部三个类型。

  • a.b 仅在 b 是对象(或对对象的引用)a 的成员时使用。因此,对于 a.b,a 总是作为某个类的实际对象(或对对象的引用)。

  • a->b 本质上是 (*a).b 的速记符号,也就是说,如果 a 是指向对象的指针,则 a->b 是访问 a 所指向的对象的属性 b。

请注意,点运算符不能重载,但 -> 可以重载,所以我们可以定义自己的函数 (operator->()),该函数应在使用此运算符时被调用。因此,如果 a 是重载 operator-> 的某个类的对象(此类常见的类型是智能指针和迭代器),那么含义则由该类的设计者决定。

语义上,引用是对象的别名,我应该也把“或指向指针的引用”加进去。不过,我考虑了一下,这么做弊大于利,因为很少用到指向指针的引用 (T*&)。

示例代码

#include<iostream>
class A {
   public: int b;
   A() { b = 5; }
};
int main() {
   A a = A();
   A* x = &a;
   std::cout << "a.b = " << a.b << "\n";
   std::cout << "x->b = " << x->b << "\n";
   return 0;
}

输出

5
5

更新于: 30-Jul-2019

431 次浏览

开始你的职业生涯

完成课程后获得认证

开始
广告
© . All rights reserved.