如何在 C++ 中将指针转换/转换为引用

Posted

技术标签:

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

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

【问题讨论】:

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

这样称呼它:

foo(*ob);

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

【讨论】:

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

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

【讨论】:

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

以上是关于如何在 C++ 中将指针转换/转换为引用的主要内容,如果未能解决你的问题,请参考以下文章

如何在c ++中将int数组转换为字节数组[重复]

在 C++ 中将指针转换为数组形式的问题?

在 C++ 中将指针转换为 volatile void**

如何在 C++ 中将数字转换为字符串,反之亦然

在 C 和 C++ 中将 int 值转换为 char 指针差异

如何在 C 中将 void 指针转换为 char 指针