在c++中,点(.)操作符和->有什么区别?
当前回答
注意->操作符不能用于某些事情,例如访问操作符[]。
#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.
}
其他回答
的。运算符用于直接成员访问。
object.Field
箭头解除了对指针的引用,这样你就可以访问它所指向的对象/内存
pClass->Field
Foo ->bar()与(* Foo).bar()相同。
上面的括号是必要的,因为*和的结合强度。操作符。
*foo.bar()将无法工作,因为Dot(.)操作符首先被求值(参见操作符优先级)
点(.)操作符不能重载,箭头(->)操作符可以重载。
点(.)操作符不能应用于指针。
另请参阅:在c++中箭头操作符(->)的同义词是什么?
箭头操作符与点操作符类似,只是它先对指针进行解引用。foo.bar()在对象foo上调用方法bar(), foo->bar在指针foo指向的对象上调用方法bar。
pSomething->someMember
等于
(*pSomething).someMember
作为指针,我们可以用
*pointervariable.foo
但是。运算符的优先级高于*运算符,因此。首先求值。所以我们需要用括号强制执行:
(*pointervariable).foo
但是一直键入()是很困难的,所以他们开发了->作为表示相同内容的快捷方式。如果您正在访问对象或对象引用的属性,请使用。如果您正在通过指针访问对象的属性,请使用->