2014-04-14 128 views
1

我還沒有能夠在這裏或通過谷歌找到類似的問題,也許是因爲我不知道我是否問正確的問題,所以不知道標題是否正確。但我的代碼看起來像這樣的工作:將值傳遞給const引用參數?

Foo * foo = new Foo(); 
add(*foo); //Couldnt find any similar questions on this syntax? 

void add(const Foo & foo){ 

//What exactly is foo here? How can i manipulate its members, foo. or foo-> ? 

} 

回答

0

變量fooadd方法內是恆定的參考。它的行爲就像一個指針,它不會複製對象:您與它交互,就好像它是對象本身一樣。與指針不同,引用不能爲NULL,並且不能重新分配。您使用點.運算符而不是->運算符與它進行交互。

由於foo是一個恆定的參考,你可以閱讀foo的成員,但你不能爲它們分配。此外,foo參考上的任何成員函數調用僅限於明確標記爲const的函數。

調用add與解除引用foo是好的,只要foo不是NULL。通過取消引用NULL指針來進行引用是未定義的行爲。

+0

它的行爲就像對象本身,而不是像指針一樣。 – EJP

+0

@EJP我澄清了我關於引用類似於指針的觀點。 – dasblinkenlight

3

'foo'是一個常量引用。您可以通過foo.fred,foo.method()等訪問其成員,但不能更改任何數據成員或調用任何非const方法。