2011-01-06 113 views
1

在C++中,我們使用&來表示傳遞引用。因爲對象總是通過引用傳遞的,所以你不需要使用這個&?或者沒有關係?Java C++參考問題

java和C++在通過值和引用傳遞方面有什麼不同。我認爲在java中的所有東西都是通過引用傳遞的,但它是按值傳遞的?爲什麼是這樣?那麼基本類是通過值傳遞的,而類對象是通過引用傳遞的呢?

+0

這個[答案](http://stackoverflow.com/questions/2139224/how-to-pass-objects-to-functions-in-c/21​​39553#2139553)到不同的[問題](http:///stackoverflow.com/q/2139224/36565)可能包含大部分你想知道的內容。 – 2011-01-06 09:19:07

回答

8

清除兩件事情了:

  1. C++默認是路過值始終,並且您要明確必須指出,如果你的函數接受與&
  2. Java的一提的是路過總是(對象是不是通過引用傳遞,但引用通過值傳遞 - 即它是對象引用的副本 - 因此您可以使用該引用修改對象Ë但你不能指望像掉期操作[一個參考與另一個]正常工作)
+2

將Java中的所有對象變量視爲與C++指針等效是有幫助的。這是他們如何處理。 – 2011-01-06 10:00:40

0

我對C++的說法傳遞機制,包括針對Java語義的不同之最後一節之前寫了一個詳細的解答。你可以閱讀它here

基本上,並把陣列放在一邊(更多的陣列here),因爲那些是不同的野獸。在C++中,如果參數類型不包含&,則按值傳遞(複製)。如果這個類型包含一個*那麼它就是一個指針,它是指向被複制的指針,但是執行一個拷貝。

在Java中,對於引用類型,您從不使用實際對象,而是使用引用(C/C++方言中的指針)。所有參數都通過值傳遞,這意味着引用將被複制(該函數將無法修改調用者的引用),但可以通過複製的引用修改引用的對象。