我現在在看別人的代碼,看到一個不尋常的(ATLEAST我)函數聲明的語法。以下有效的C++語法?
bool Foo::Bar(Frame *&ptoframe, int msToBlock)
{
....
}
我認爲開發人員試圖聲明一個指向引用的指針。
感謝您的幫助
我現在在看別人的代碼,看到一個不尋常的(ATLEAST我)函數聲明的語法。以下有效的C++語法?
bool Foo::Bar(Frame *&ptoframe, int msToBlock)
{
....
}
我認爲開發人員試圖聲明一個指向引用的指針。
感謝您的幫助
是的,它是有效的。從右向左閱讀語法:它被讀取對指針的引用。如果你想改變傳遞給函數的指針,這很重要。就像任何其他參數一樣,指針通過引用有效傳遞。
這是一個相當例如:
void no_change(int * ptr) {
ptr = 0;
}
void change_ptr(int *& ptr) {
ptr = 0;
}
int main() {
int *x;
change_ptr(x);
}
傳遞給change_ptr
任何指針的值,因爲我們通過引用傳遞改變。
但請注意,指針指向的對象的值仍可通過no_change
函數(即*ptr = new int
)更改。此語法僅應用於實際指針,而不是其指向的對象。
你是不是指從右到左而不是從左到右? –
@JesseGood當然。謝謝。 :) – 0x499602D2
不,第一個函數參數是一個參考指針。有時候,你想改變別人的指針......以智慧:
void change_my_char(char & c) { c = 'x'; }
void pimp_my_pointer(void * & p) { p = nullptr; }
int main() {
char x;
void * y;
change_my_char(x);
pimp_my_pointer(y);
}
難道我讀'pimp_my_pointer'爲'p-imp我的指針'(如在p-impl中)? – chris
@chris:它可能是相當的字符,所以不要覺得太糟糕了:-) –
這是一個通過引用傳遞的指針。這允許被調用者改變調用者指針的值。
查找螺旋規則。它極大地幫助閱讀類型聲明。也就是說,實際上是對指針的引用。 – chris
類型從右向左讀。 –