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


当前回答

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

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

其他回答

pSomething->someMember

等于

(*pSomething).someMember

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

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

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

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

注意->操作符不能用于某些事情,例如访问操作符[]。

#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.
}

作为指针,我们可以用

*pointervariable.foo

但是。运算符的优先级高于*运算符,因此。首先求值。所以我们需要用括号强制执行:

(*pointervariable).foo

但是一直键入()是很困难的,所以他们开发了->作为表示相同内容的快捷方式。如果您正在访问对象或对象引用的属性,请使用。如果您正在通过指针访问对象的属性,请使用->