在c++中,点(.)操作符和->有什么区别?
当前回答
->只是指针解引用的语法糖,
正如其他人所说:
指针- >方法();
是一种简单的表达方式:
(*指针).method ();
更多指针的乐趣,看看Binky,和他的魔法棒去引用:
http://www.youtube.com/watch?v=UvoHwFvAvQE
其他回答
pSomething->someMember
等于
(*pSomething).someMember
点操作符不能重载,箭头操作符可以重载。箭头操作符通常应用于指针(或行为类似指针的对象,如智能指针)。点运算符不能应用于指针。
编辑 当应用于指针时,箭头操作符相当于将点操作符应用于指针,例如ptr->field相当于(*ptr).field。
注意->操作符不能用于某些事情,例如访问操作符[]。
#include <vector>
int main()
{
std::vector<int> iVec;
iVec.push_back(42);
std::vector<int>* iVecPtr = &iVec;
//int i = iVecPtr->[0]; // Does not compile
int i = (*iVecPtr)[0]; // Compiles.
}
Foo ->bar()与(* Foo).bar()相同。
上面的括号是必要的,因为*和的结合强度。操作符。
*foo.bar()将无法工作,因为Dot(.)操作符首先被求值(参见操作符优先级)
点(.)操作符不能重载,箭头(->)操作符可以重载。
点(.)操作符不能应用于指针。
另请参阅:在c++中箭头操作符(->)的同义词是什么?
->操作符用于处理指针,点用于其他操作符。 如果我们有这样一个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
注意:对于一个类,访问类的成员函数的方式也将是相同的