C++提供了三种访问类或者类对象的操作符,他们是
::
,
.
,
->
, 这三种操作符有着各自的使用场景和定义。接下来简单介绍
a::b
,
a.b
和
a->b
。
双冒号 ::
a::b
,当a
是一个类或者一个命名空间时,b
是一个类或者一个命名空间的成员。在这种情况下,a
一定是一个类的名称或命名空间的名称。::
前面什么都没有说明后面跟的是全局作用域的内容,例子如下:
#include <iostream>
using namespace std;
void fun() {
cout << "::fun()" << endl;
}
class A
{
public:
void fun() {
cout << "A::fun()" << endl;
}
void test() {
::fun();
fun();
}
};
int main()
{
A a;
a.test();
// 输出 ::fun() A::fun()
return 0;
}
小点 .
a.b
,仅仅用于b
是一个对象a
(或对于这个对象的引用)的成员之一。那么对于a.b
,a
一定是某个类的一个具体的对象(或对于这个对象的引用)。
回顾下对象的引用:
int val = 1024;
int &reVal = val;
箭头 ->
a->b
,最早是(*a).b
的一个速记符号,->
是三种访问成员的操作符中唯一可被重载的操作符。所以,如果a
是某个类的对象,并且该类重载了操作符->
(通常是智能指针和迭代器),那么此时,操作符的意思就由类的具体的重载实现来决定。
- 如果
a
是个指针,b
就是指针a
指向的对象的一个成员; - 如果
a
是某个重载了操作符->
的类的对象,那么被重载过的->()
方法就会被调用。
参考链接: CSDN
参考链接: stack overflow