[英]c++ question, about * and ->
当我有一个像这样的指针:
MyClass * pRags = new MyClass;
所以我可以使用
pRags->foo()
要么
(*pRags).foo()
打电话给foo。
为什么这两个是相同的? 什么是* pRags?
谢谢
为什么这两个相同?
它们是等价的,因为规范说它们是等价的。 内置的->
是根据内置*
和来定义的.
。
什么是
*pRags
?
它是pRags
指向的MyClass
对象。 *
取消引用指针,产生指向对象。
有关更多信息,请考虑阅读一本好的C ++入门书 。
除了其他答案,' - >'是为了方便起见。 每次访问函数的类变量时,取消引用指向对象的指针都非常难看,不方便,并且可能更令人困惑。
例如:
(*(*(*car).engine).flux_capacitor).init()
VS
car->engine->flux_capacitor->init()
pRags->foo()
定义为语法糖,相当于(*pRags).foo()
。
*
运算符取消引用指针。 也就是说,它表示您正在操作指针指向的内容,而不是指针本身。
->
只是一种编写(*).
的便捷方式(*).
。 和*pRags
是存储在pRags
中的地址对象。
->
包含在C中(因此继承到C ++中)作为符号方便。 *
在该上下文中用于取消引用指针。 一元*
被称为解除引用运算符 。 取消引用指针会将T*
变为T&
; 取消引用对象会在该对象值上调用该对象类型的一元运算operator*
(如果已定义),否则会给出错误。
(*pRags)
通过指针pRags
并获得整个对象,所以你可以使用常规点表示法.
。
pRags是MyClass类型的指针。 就像你可以有原始数据类型的指针,例如int ptr,你也可以有指向对象的指针,在这种情况下由pRags表示。 现在使用箭头操作符( - >)访问对象“members”,或者您可以使用“。”。 并取消引用“*”来访问对象的成员值。 这里的成员是MyClass中的变量。 所以,foo()会在MyClass中有一个定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.