2012-12-18 75 views
4

可能重複:
Function argument type followed by *&指針引用參數

我現在在看別人的代碼,看到一個不尋常的(ATLEAST我)函數聲明的語法。以下有效的C++語法?

bool Foo::Bar(Frame *&ptoframe, int msToBlock) 
{ 
    .... 
} 

我認爲開發人員試圖聲明一個指向引用的指針。

感謝您的幫助

+0

查找螺旋規則。它極大地幫助閱讀類型聲明。也就是說,實際上是對指針的引用。 – chris

+0

類型從右向左讀。 –

回答

5

是的,它是有效的。從右向左閱讀語法:它被讀取對指針的引用。如果你想改變傳遞給函數的指針,這很重要。就像任何其他參數一樣,指針通過引用有效傳遞。

這是一個相當例如:

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)更改。此語法僅應用於實際指針,而不是其指向的對象。

+1

你是不是指從右到左而不是從左到右? –

+0

@JesseGood當然。謝謝。 :) – 0x499602D2

4

不,第一個函數參數是一個參考指針。有時候,你想改變別人的指針......以智慧:

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); 
} 
+0

難道我讀'pimp_my_pointer'爲'p-imp我的指針'(如在p-impl中)? – chris

+0

@chris:它可能是相當的字符,所以不要覺得太糟糕了:-) –

4

這是一個通過引用傳遞的指針。這允許被調用者改變調用者指針的值。