当我有一个像:
这样的指针MyClass * pRags = new MyClass;
所以我可以使用
pRags->foo()
或
(*pRags).foo()
打电话给foo。
为什么这两个是相同的?什么是* pRags?
谢谢
答案 0 :(得分:5)
为什么这两个相同?
它们是等价的,因为规范说它们是等价的。内置->
是根据内置*
和.
定义的。
什么是
*pRags
?
MyClass
指向的pRags
对象。 *
取消引用指针,产生指向对象。
有关详细信息,请考虑选择a good introductory C++ book。
答案 1 :(得分:5)
除了其他答案,' - >'是为了方便。每次访问函数的类变量时,取消引用指向对象的指针都非常难看,不方便,而且可能更容易混淆。
例如:
(*(*(*car).engine).flux_capacitor).init()
vs
car->engine->flux_capacitor->init()
答案 2 :(得分:4)
pRags->foo()
定义作为语法糖,相当于(*pRags).foo()
。
*
运算符取消引用指针。也就是说,它表示你正在操作指针指向的内容,而不是指针本身。
答案 3 :(得分:2)
->
只是编写(*).
的便捷方式。 *pRags
是pRags
中存储的地址对象。
答案 4 :(得分:1)
->
包含在C中(因此继承到C ++中)作为符号方便。*
用于取消引用指针。答案 5 :(得分:1)
一元*
被称为dereferencing operator。取消引用指针会将T*
变为T&
;取消引用一个对象会在该对象值上调用该对象类型的一元operator*
(如果已定义),或者给出错误。
答案 6 :(得分:1)
(*pRags)
通过指针pRags
并获取整个对象,因此您可以使用常规点表示法.
。
答案 7 :(得分:1)
pRags是MyClass类型的指针。就像你可以有原始数据类型的指针,例如int ptr,你也可以有指向对象的指针,在这种情况下由pRags表示。现在使用箭头操作符( - >)访问对象“members”,或者您可以使用“。”。并取消引用“*”来访问对象的成员值。这里的成员是MyClass中的变量。所以,foo()会在MyClass中有一个定义。