在c++中,点(.)操作符和->有什么区别?
当前回答
点操作符不能重载,箭头操作符可以重载。箭头操作符通常应用于指针(或行为类似指针的对象,如智能指针)。点运算符不能应用于指针。
编辑 当应用于指针时,箭头操作符相当于将点操作符应用于指针,例如ptr->field相当于(*ptr).field。
其他回答
作为指针,我们可以用
*pointervariable.foo
但是。运算符的优先级高于*运算符,因此。首先求值。所以我们需要用括号强制执行:
(*pointervariable).foo
但是一直键入()是很困难的,所以他们开发了->作为表示相同内容的快捷方式。如果您正在访问对象或对象引用的属性,请使用。如果您正在通过指针访问对象的属性,请使用->
箭头操作符与点操作符类似,只是它先对指针进行解引用。foo.bar()在对象foo上调用方法bar(), foo->bar在指针foo指向的对象上调用方法bar。
的。(点)运算符通常用于从类的实例(或类的静态字段/方法)中获取字段/调用方法。
p.myField, p.myMethod() -一个类的p个实例
->(箭头)操作符用于从类指向的内容获取字段/调用方法。
p->myField, p->myMethod() - p指向类
的。运算符用于直接成员访问。
object.Field
箭头解除了对指针的引用,这样你就可以访问它所指向的对象/内存
pClass->Field
点操作符不能重载,箭头操作符可以重载。箭头操作符通常应用于指针(或行为类似指针的对象,如智能指针)。点运算符不能应用于指针。
编辑 当应用于指针时,箭头操作符相当于将点操作符应用于指针,例如ptr->field相当于(*ptr).field。