2012-03-22 59 views
0

可能重複:
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++?何時使用比指針更好的引用?

在我看來,一個指針更靈活和基本相同的引用。引用不能爲空,但如果你有一個指針引用,那麼你會發生什麼?那麼這種情況是否會否定「不可爲空」的優勢呢?無論如何,這真的是一個優勢嗎?

爲什麼不總是使用指針? (我真的在問,老實說我還沒有下定決心)

+0

有些情況下可以使用指針,有些則使用引用。你對哪種情況感興趣? – 2012-03-22 15:19:35

+0

可能重複[何時通過引用傳遞以及何時通過C++中的指針傳遞?](http://stackoverflow.com/questions/3613065/when-to-pass-by-reference-and-when-to-pass -by-pointer-in-c)或http://stackoverflow.com/questions/57483/what-are-the-differences-between-pointer-variable-and-reference-variable-in-c或...任何的其他噸。 – 2012-03-22 15:20:21

+0

我確實認爲這可能以前曾被問過,但我找不到一個問這個確切的問題。 – SirYakalot 2012-03-22 15:45:39

回答

1

通過使用引用,你明確指出它不能是0。當代碼中的某些值不能被初始化時,它是有意義的。另一方面,當值可以被初始化或未初始化時,指針是有用的。您可以通過與0進行比較來檢查它。

1
  • 參考不能爲空見,如你所說。

  • 引用總是被初始化。一個非空指針可能仍然沒有初始化。

  • 一個引用是穩定的。您不能先將參考點設爲A,然後再設爲B.一旦初始化,它就是同一個對象的別名。

  • 引用的語法有些整齊。

1

對可以爲null的指針的引用與對實際值或對象的引用不同。指針的值可以爲null,但實際的指針不是!

使用參考文獻讓您安心,因爲知道您安全且不會發生奇怪的事情。所以當你不需要實際指針的功能時,你應該總是使用引用。一般情況下(並且總是有例外)僅在以下情況下使用指針:

a。您需要在執行期間動態分配內存。

b。你實際上需要指針運算(p ++)

c。你需要在容器中保存已分配的對象,但在這種情況下,通常使用shared_ptr等方式來封裝指針。

1

指針的靈活性帶來了一個代價:每次看到一個指針,都必須考慮到你可能在某處使用了這種靈活性。這更多的是要注意...更多的調試..等等。參考文獻比較簡單,不太具有特色,但是攜帶的精神包袱較少。

除此之外,語法不如* s和-> s更加混亂。 :)

0

通常,引用只是指針的語法糖,這意味着無論您使用哪一個,都可以使用其他(以及,但並非總是如此)。但是有時候,引用比指針更有意義,特別是當你定義一個函數的參數不能爲空時,或者檢查空參數是非常優雅的時候。在這種情況下,您只需將它們引用。其中一個例子是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++程序員會使用參考優雅找到的第一個解決方案,而第二解決方案不必要繁瑣。

+0

「有時候」引用比指針更有意義嗎?我寧願說,「大部分時間」。 – leftaroundabout 2012-03-22 15:45:22

+0

@leftaroundabout:我認爲,大多數情況下,它只是語法糖,但糖也很重要,因爲沒有它,生活是非常苦澀的,所以我有點同意你的觀點。 – Nawaz 2012-03-22 15:52:58