【问题标题】:I've got a pointer to an object. How do I call a function that expects a reference?我有一个指向对象的指针。如何调用需要引用的函数?
【发布时间】:2009-02-16 08:42:55
【问题描述】:

我有一个引用对象的函数:

void move(Ball& ball);

我有另一个函数调用'move()',它有一个指向球的指针:

void foo(Ball* ball){
 //call move()
}

foo() 应该如何将球传给move()

应该是这样的:

move(*ball);

或:

move(ball);

或:

move(&ball);

【问题讨论】:

  • 你有编译器吗?为什么不自己测试一下。懒惰的流浪汉。
  • 并不是我不同意自己做最少的研究,但是相信你的 C++ 编译器告诉你什么是合法的或不合法的通常不是一个好主意。 “it compiles”与“it is well-defined C++”不同

标签: c++ pointers reference


【解决方案1】:

第一个,move(*ball)。

第二个,move(ball) 尝试传递指针,第三个,move(&ball) 尝试将指针传递给指针。

【讨论】:

    【解决方案2】:

    移动(*球);

    原因如下。您可以将引用视为基本上将指针指向它所传递的对象。因此,您需要对象本身,而不是指针。如果您调用 move(ball) 您将引用(指针)指针,而不是对象。相反,move(*ball) 取消引用指针,然后引用获取该取消引用对象的指针。

    【讨论】:

      【解决方案3】:

      在指针上使用 * 操作符可以取消引用它,从而获得一个 Ball 对象。由于您实际上是将参数传递给接受 Ball& (因此是 Ball 引用)的函数,因此只会传递引用,而不是整个对象。正确的用法是:

      move(*ball);
      

      但我建议您以“说明”其性质的方式命名变量,因此 ballPtrball_ptr 会更合适,您永远不会忘记取消引用它。

      【讨论】:

        【解决方案4】:

        第一个正确的是 move(*ball) ball 是一个指向对象的指针,你需要在解引用它的ball指针指向的对象之后解引用它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-31
          • 1970-01-01
          • 2019-10-21
          • 1970-01-01
          • 2014-09-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多