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


当前回答

->只是指针解引用的语法糖,

正如其他人所说:

指针- >方法();

是一种简单的表达方式:

(*指针).method ();

更多指针的乐趣,看看Binky,和他的魔法棒去引用:

http://www.youtube.com/watch?v=UvoHwFvAvQE

其他回答

点操作符不能重载,箭头操作符可以重载。箭头操作符通常应用于指针(或行为类似指针的对象,如智能指针)。点运算符不能应用于指针。

编辑 当应用于指针时,箭头操作符相当于将点操作符应用于指针,例如ptr->field相当于(*ptr).field。

->操作符用于处理指针,点用于其他操作符。 如果我们有这样一个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

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

目标。 Dot用于对象;箭头作用于指向对象的指针。

std::string str("foo");
std::string * pstr = new std::string("foo");

str.size ();
pstr->size ();

当你有指针时使用->。 使用。当你有结构(类)时。

当你想要指向属于结构使用的属性时:

structure.attribute

当你想通过指针指向一个有内存引用的属性时,使用->:

pointer->method;

或与:

(*pointer).method

箭头操作符与点操作符类似,只是它先对指针进行解引用。foo.bar()在对象foo上调用方法bar(), foo->bar在指针foo指向的对象上调用方法bar。