無法理解C++中的方法簽名。尋找第二個意見。方法簽名C++
readPage(File* file, const PageId pageNo, Page*& page) {}
上面可以被重新寫爲如下?
readPage(File *file, const PageId pageNo, Page *&page) {}
因此,*文件是在和* &頁面中傳遞指針的東西的地址,然後將其轉換爲一個指針?我很困惑與*&
無法理解C++中的方法簽名。尋找第二個意見。方法簽名C++
readPage(File* file, const PageId pageNo, Page*& page) {}
上面可以被重新寫爲如下?
readPage(File *file, const PageId pageNo, Page *&page) {}
因此,*文件是在和* &頁面中傳遞指針的東西的地址,然後將其轉換爲一個指針?我很困惑與*&
file
的組合是一個指向File
,這意味着任何改變它所指向的,像
file->doSomething(); // the caller will see this change
將被調用可見但是如果覆蓋指針,那麼不僅調用者不會看到指針的新值,而且之後對文件的任何更改也不會被觀察到,因爲它現在是指向不同的File
的指針,並且因爲指針本身是按值傳遞的。現在
file = new File(); // the caller will not see this change
file->doSomething(); // neither will it see this one
,page
是一個指針引用一個Page
。換句話說,它的行爲就像一個指針,所以
page->doSomething(); // the caller will see this change
仍然被調用者觀察到。但如果你現在覆蓋指針,調用者的指針也會隨之改變,因此所有連續的變化也可以看出:
page = new Page(); // caller also sees this change
page->doSomething(); // and this too
這是因爲指針本身是按引用傳遞,所以指針的任何變化本身由主叫方觀察。
(是的,你只要你把空間都無所謂的樣子,所以這兩種方式是相同的)
我測試這個並理解我需要傳遞一個指向readPage的指針以匹配File *文件,但對於Page *&頁面,我還需要傳入它看起來像的指針。但是一旦傳入,它就不清楚它是如何解釋的。 *&id和* id幾乎類似?在這兩種情況下,它都會評估一個指針。 – tattvabodha
區別與'int'和'int&'之間的區別相似。在這兩種情況下,您都可以傳入一個int變量,但在第二種情況下,調用者可以觀察到對它的所有更改。同樣,在這兩種情況下('file *'和'page *&')你傳遞一個指針,但在後一種情況下,調用者可以看到指針的改變。 – Ishamael
頁* &是參考指針指向一個頁面
閱讀關於在你最喜歡C引用了++教科書。 'page'的類型是「對'Page'指針的引用」。 –
http://en.cppreference.com/w/cpp/language/reference –
空白在這裏並不重要 - 兩個簽名都是相同的。 – Eugene