何时使用引用优于指针?

时间:2012-03-22 15:15:36

标签: c++

  

可能重复:
  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++?

在我看来,指针更灵活,与引用基本相同。引用不能为null,但是如果你有一个指针的引用然后使其为空,会发生什么?这种情况不会否定'不能为空'的优势吗?无论如何它真的有优势吗?

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

7 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

  • 正如您所说,引用不能为空。

  • 始终初始化引用。仍然无法初始化非空指针。

  • 参考稳定。您不能首先将参考点设置为A,然后设置为B.一旦初始化,它就是同一个对象的别名

  • 引用的语法有点整洁。

答案 2 :(得分:1)

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

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

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

湾你实际上需要指针运算(p ++)

℃。你需要在容器中保存已分配的对象,但在这种情况下,通常使用shared_ptr包装指针是一种很好的做法。

答案 3 :(得分:1)

指针的灵活性需要付出代价:每次看到指针时,都必须考虑到你可能在某处使用这种灵活性。这更需要注意...更多调试..等等。参考文献,更简单,更少的特点,带来更少的心理负担。

除此之外,语法不会因*->而混乱。 :)

答案 4 :(得分:1)

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

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

保证引用不为null并初始化。

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

答案 5 :(得分:0)

答案 6 :(得分:0)

通常,引用只是指针的语法糖,这意味着无论你使用哪一个,都可以使用其他(虽然,但并非总是如此)。但有时候,引用比指针更有意义,特别是当你定义一个参数不能为null的函数时,或者检查null参数是否优雅。在这种情况下,您只需将它们作为参考。一个这样的例子是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 ++程序员会使用引用优雅找到第一个解决方案,而第二个解决方案不必要很麻烦。