【问题标题】:When is using a reference better than a pointer? [duplicate]什么时候使用引用比使用指针更好? [复制]
【发布时间】:2012-03-22 15:15:36
【问题描述】:

可能重复:
What are the differences between pointer variable and reference variable in C++?
When to pass by reference and when to pass by pointer in C++?

在我看来,指针更灵活,与引用基本相同。引用不能为空,但是如果你有一个指针的引用,然后你将它设为空,会发生什么?那这种情况难道不会否定“不能为空”的优势吗?这真的是一种优势吗?

为什么不总是使用指针呢? (我真的在问,老实说我还没有下定决心)

【问题讨论】:

标签: c++


【解决方案1】:
  • 如你所说,引用不能为空。

  • 始终初始化引用。一个非空指针仍然不能被初始化。

  • 参考稳定。不能先将参考点指向A,再指向B。一旦初始化,它就是同一个对象的别名

  • 引用的语法更加简洁。

【讨论】:

    【解决方案2】:

    对可以为 null 的指针的引用与对实际值或对象的引用不同。指针的值可以为空,但实际的指针不是!

    使用参考可以让您高枕无忧,因为您知道自己是安全的,不会发生奇怪的事情。所以当你不需要实际指针的特性时,你应该总是使用引用。通常(并且总是有例外)仅在以下情况下使用指针:

    一个。您需要在执行期间动态分配内存。

    b.你实际上需要指针算术(p++)

    c。您需要将分配的对象保存在容器中,但在这种情况下,使用 shared_ptr 之类的东西包装指针通常是一种很好的做法。

    【讨论】:

      【解决方案3】:

      通过使用引用,您明确声明它不能是0。当代码中的某些值不能未初始化时,这是有道理的。另一方面,当值可以被初始化或未初始化时,指针很有用。您可以通过与0比较来检查它。

      【讨论】:

        【解决方案4】:

        如有疑问,请前往来源 (Stroustrup):http://www2.research.att.com/~bs/bs_faq2.html#pointers-and-references

        引用适用于运算符重载和复制构造函数。

        引用保证不为空并被初始化。

        当您希望参数是可选的或当值为 NULL 时可以忽略时,使用指针作为参数效果很好。

        【讨论】:

          【解决方案5】:

          指针的灵活性是有代价的:每次看到指针时,您都必须考虑到您可能在某处使用了这种灵活性。这更需要提防……更多调试……等等。参考文献更简单、不那么有特色,携带的精神包袱也更少。

          除此之外,*s 和 ->s 的语法不那么混乱。 :)

          【讨论】:

            【解决方案6】:
            【解决方案7】:

            通常,引用只是指针的语法糖,这意味着无论您在哪里使用一个,也可以使用另一个(当然,并非总是如此)。但有时,引用比指针更有意义,尤其是当您定义一个参数不能为空的函数时,或者检查空参数是那么优雅。在这种情况下,您只需将它们作为参考。一个这样的例子是swap 函数:

             template<typename T>
             void swap(T & a, T & b)
             {
                   T temp(a);
                   a = b;
                   b = temp;
             }
            

            如果使用指针,那么它会变成这样:

             template<typename T>
             void swap(T * a, T * b)
             {
                   //do you want to check for null here?
                   T temp(*a);
                   *a = *b;
                   *b = temp;
             }
            

            我认为,大多数 C++ 程序员会发现第一个解决方案使用优雅引用,而第二个解决方案不必要麻烦。

            【讨论】:

            • “有时”引用比指针更有意义?我宁愿说,“大多数时候”。
            • @leftaroundabout:我认为,大多数时候,它只是语法糖,但糖也很重要,因为没有它,生活会很苦,所以我有点同意你的看法。
            猜你喜欢
            • 2010-10-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-03-09
            • 2011-02-21
            • 2010-12-08
            • 1970-01-01
            • 2019-06-06
            相关资源
            最近更新 更多