繁体   English   中英

c ++问题,关于*和 - >

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM