在C++中运算符.和->的区别

( . ) 操作符与 ->运算符的区别:

 

  • 相同点:

点和箭头运算符都在C ++中用于访问类的成员。

  • 不同点:

首先要明白的关键点是,在C ++中,声明为class,struct或union的类型被视为“类类型”。

以下将说明两者区别:(它们用于不同的场景

1. a.b 被用于当 b 是对象 a 的成员,需要访问这个成员 b 的时候会使用a.b这样的方式。(对这种方式,如果 a 是某对象的引用,引用就是一个对象,那么此时就可以使用 . 这种操作符);

2. a->b 其实是 (*a).b 这种访问方式的简写,即当 a 是指向对象的指针是就需要这种方式来访问这个 b ;

  • 注意:

需要注意的是 运算符( . )是不可重载的运算符;运算符 ( -> )是可重载的运算符,因此我们可以定义我们自己的函数(operator->()),当使用此运算符时应该调用它。所以如果a是一个重载operator->的类的对象(常见的类型是智能指针和迭代器),那么 a 访问自己的成员是肯定会调用这个自己实现的 (->) 运算符。

知道以上的知识点之后,我们来尝试使用一下两者,看看区别:

#include

class A {
public: 
    int b;

    A() { b = 5; }
};

int main() {
   A a = A(); // a 是一个对象   
   A* x = &a; // x 是一个指向对象的指针

   std::cout << "a.b = " << a.b << "\n";
   std::cout << "x->b = " << x->b << "\n";

   return 0;
}

 

 

你可能感兴趣的:(c++)