如何在 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
的副本,还是只是将指针转换(如果不强制转换)到引用?如果ob
是nullptr
会怎样?
@Drew 它只是取消引用指针。没有副本。没有转换。没有演员表。然后通过引用将该对象传递给该函数。如果该点为空,则为错误。
@DrewNoakes ***.com/questions/2727834/…
请注意:如果您想在不传递给函数的情况下获得引用,请像这样使用它:Object& objref = *ob;
【参考方案2】:
foo(*ob);
你不需要转换它,因为它是相同的 Object 类型,你只需要取消引用它。
【讨论】:
猜测 amd 添加很多 ... 通常不是一个好的答案的格式(即使在这种情况下它是正确的),这可能就是你投反对票的原因。 bhhaaa,我添加了“我猜”,因为它让我至少写了 30 个字符。这也是我添加“............”的方式 @RoeeGavirel 我是你的第一个赞成票,因为我觉得反对票很严厉。 FWIW 你可以超过 30 个字符的限制,但添加一个 html 注释 我在我的第一个版本的答案!我对您的回答的编辑显示了如何。 这些天不接受仅代码的答案,没有解释。 @KeithM - 这是一个随机评论和-1。答案是大约 6 年前给出的,这个问题也没有问“为什么”,只问了“如何”。但可以肯定的是,我会添加一个解释。以上是关于如何在 C++ 中将指针转换/转换为引用的主要内容,如果未能解决你的问题,请参考以下文章