在c++中,点(.)操作符和->有什么区别?
当前回答
两者之间最简单的区别是"->"在指针去查看对象字段、函数等之前解引用,而"."不先解引用。当你有一个指向对象的指针时,使用"->",当你处理一个对象的实际实例时,使用"."。
另一种等效的书写方法可能是先在指针上使用取消引用的“*”,然后只使用“.”。我们通过使用“->”跳过中间商。
还有其他不同之处,但其他答案已经广泛地涵盖了这一点。
如果您有Java背景,这可能会让您感到困惑,因为在Java中,所有东西都是指针。这意味着没有理由让符号不首先解除对指针的引用。然而,在c++中,你必须更加小心地记住什么是指针,什么不是指针,用前缀“p_”或简单的“p”来标记它们可能是一个好主意。
其他回答
的。运算符用于直接成员访问。
object.Field
箭头解除了对指针的引用,这样你就可以访问它所指向的对象/内存
pClass->Field
两者之间最简单的区别是"->"在指针去查看对象字段、函数等之前解引用,而"."不先解引用。当你有一个指向对象的指针时,使用"->",当你处理一个对象的实际实例时,使用"."。
另一种等效的书写方法可能是先在指针上使用取消引用的“*”,然后只使用“.”。我们通过使用“->”跳过中间商。
还有其他不同之处,但其他答案已经广泛地涵盖了这一点。
如果您有Java背景,这可能会让您感到困惑,因为在Java中,所有东西都是指针。这意味着没有理由让符号不首先解除对指针的引用。然而,在c++中,你必须更加小心地记住什么是指针,什么不是指针,用前缀“p_”或简单的“p”来标记它们可能是一个好主意。
Foo ->bar()与(* Foo).bar()相同。
上面的括号是必要的,因为*和的结合强度。操作符。
*foo.bar()将无法工作,因为Dot(.)操作符首先被求值(参见操作符优先级)
点(.)操作符不能重载,箭头(->)操作符可以重载。
点(.)操作符不能应用于指针。
另请参阅:在c++中箭头操作符(->)的同义词是什么?
目标。 Dot用于对象;箭头作用于指向对象的指针。
std::string str("foo");
std::string * pstr = new std::string("foo");
str.size ();
pstr->size ();
很简单,只要你看到
x->y
知道它是一样的
(*x).y