在c++中,点(.)操作符和->有什么区别?


当前回答

pSomething->someMember

等于

(*pSomething).someMember

其他回答

的。运算符用于直接成员访问。

object.Field

箭头解除了对指针的引用,这样你就可以访问它所指向的对象/内存

pClass->Field
pSomething->someMember

等于

(*pSomething).someMember

->操作符用于处理指针,点用于其他操作符。 如果我们有这样一个struct类:

struct class{ int num_students; int yr_grad; };

我们有一个类的实例* curr_class(类指针),然后获取我们要做的学生数

cout << curr_class->num_students << endl;

如果我们有一个简单的类对象,比如class_2016,我们将这样做

cout << class_2016.num_students << endl;

对于指向类的指针,->操作符等价于

(*obj).mem_var

注意:对于一个类,访问类的成员函数的方式也将是相同的

的。(点)运算符通常用于从类的实例(或类的静态字段/方法)中获取字段/调用方法。

p.myField, p.myMethod() -一个类的p个实例

->(箭头)操作符用于从类指向的内容获取字段/调用方法。

p->myField, p->myMethod() - p指向类

Foo ->bar()与(* Foo).bar()相同。

上面的括号是必要的,因为*和的结合强度。操作符。

*foo.bar()将无法工作,因为Dot(.)操作符首先被求值(参见操作符优先级)

点(.)操作符不能重载,箭头(->)操作符可以重载。

点(.)操作符不能应用于指针。

另请参阅:在c++中箭头操作符(->)的同义词是什么?