可能重复:
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,但是如果你有一个指针的引用然后使其为空,会发生什么?这种情况不会否定'不能为空'的优势吗?无论如何它真的有优势吗?
为什么不总是使用指针? (我真的在问,我老实说还没有决定这个)
答案 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)
取消引用空指针以创建引用将导致未定义的行为。
和What are the differences between a pointer variable and a reference variable in C++?
答案 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 ++程序员会使用引用优雅找到第一个解决方案,而第二个解决方案不必要很麻烦。