【问题标题】:what's the difference between object * x and object& x in c++ [duplicate]c++中object * x和object& x有什么区别[重复]
【发布时间】:2011-04-24 01:52:34
【问题描述】:

可能重复:
Difference between pointer variable and reference variable in C++

假设我正在尝试将对对象 x 的引用传递给 c++ 函数...

有什么区别

pass(Object * x){


}

pass(Object& x){

}

以及当使用不同的方法声明指针/引用时,您将如何访问实际对象本身...

例如,如果我有 Object * x,我将如何实际访问 x 引用的实际对象

与 Object& x 相同

【问题讨论】:

    标签: c++ function pointers reference pass-by-reference


    【解决方案1】:

    第一个是指针传递。第二个是引用传递。

    在使用方面,指针必须先“取消引用”才能使用。这是通过*-> 运算符完成的:

    void do_something(Object * x)
    {
        Object & ref = *x; // * returns a reference
        ref.method();
        x->method(); // same as (*x).method()
    }
    

    引用没有这样的限制:

    void do_something(Object & x)
    {
        x.method();
    }
    

    但是,引用在其整个生命周期内只能指向单个对象,而指针可以更改目标并且(正如 John 在下面提到的)指向“无”(即 NULL0 或在 C ++0x,nullptr)。 C++ 中没有 NULL 引用这样的东西。

    由于引用更易于使用且不易出错,因此除非您知道自己在做什么(指针是一个相当棘手的主题),否则请更喜欢它们。

    【讨论】:

    • ...这意味着第一个可能是 NULL(无对象),而第二个不能。
    【解决方案2】:

    通过引用传递意味着调用者应该保证被引用的对象是有效的。指针传递通常需要函数检查指针是否为NULL。

    通过引用传递也意味着函数不关心对象的生命周期。通过指针传递可能需要函数来破坏对象。

    因此,显然,按引用传递具有清晰的语义,可能性较小,不易出错。

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 2020-10-06
      • 2011-08-12
      • 2019-12-06
      • 2011-05-10
      • 2012-03-10
      相关资源
      最近更新 更多