【问题标题】:How to cast/convert pointer to reference in C++如何在 C++ 中将指针转换/转换为引用
【发布时间】:2012-04-27 16:49:16
【问题描述】:

如何将指针 (Object *ob) 传递给原型为 void foo(Object &) 的函数?

【问题讨论】:

  • 标题说“cast [sic] reference to pointer”,但问题以指针开头,需要引用。是哪个方向?
  • @MSalters 它应该是 convert。我正在编辑它。但我一直在寻找我得到的任何解决方案,所以我提到了 cast

标签: c++ pointers casting reference type-conversion


【解决方案1】:

这样称呼它:

foo(*ob);

请注意,正如您的问题标题中所建议的那样,这里没有进行强制转换。我们所做的只是取消引用指向对象的指针,然后将其传递给函数。

【讨论】:

  • @Ricobob 这就是在 SO 上经常发生的事情。容易理解的简单问题的答案通常会获得很多赞成票。对棘手问题的冗长而复杂的答案通常很少得到支持,因为选民无法轻易判断优点。至于代表,由于代表上限,我对此一无所知。 ;-) 但我衷心同意。我希望复杂的答案能获得更多的代表。
  • 这会创建ob 的副本,还是只是将指针转换(如果不强制转换)到引用?如果obnullptr 会怎样?
  • @Drew 它只是取消引用指针。没有副本。没有转换。没有演员表。然后通过引用将该对象传递给该函数。如果该点为空,则为错误。
  • 请注意:如果您想在不传递给函数的情况下获得引用,请像这样使用它:Object& objref = *ob;
【解决方案2】:
foo(*ob);

你不需要转换它,因为它是相同的 Object 类型,你只需要取消引用它。

【讨论】:

  • 猜测 amd 添加很多 ... 通常不是一个好的答案的格式(即使在这种情况下它是正确的),这可能就是你投反对票的原因。
  • bhhaaa,我添加了“我猜”,因为它让我至少写了 30 个字符。这也是我添加“............”的方式
  • @RoeeGavirel 我是你的第一个赞成票,因为我觉得反对票很严厉。 FWIW 你可以超过 30 个字符的限制,但添加一个 HTML 注释 我在我的第一个版本的答案!我对您的回答的编辑显示了如何。
  • 这些天不接受仅代码的答案,没有解释。
  • @KeithM - 这是一个随机评论和-1。答案是大约 6 年前给出的,这个问题也没有问“为什么”,只问了“如何”。但可以肯定的是,我会添加一个解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 2011-10-27
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多