2017-08-21 30 views
3

採取以下類爲例如影隨形一個成員函數的函數參數

class A 
{ 
    int m_c; 
public: 
    void B(int C);  
    void C(); 
}; 

這將發出以下警告,如果我與-Wshadow參數編譯

memberFuncArg.cpp: In member function ‘void A::B(int)’: 
memberFuncArg.cpp:12:16: warning: declaration of ‘C’ shadows a member of 'this' [-Wshadow] 
void A::B(int C) 
       ^

會有什麼後果用這樣的另一個成員函數的參數來映射成員函數?

+4

你的意思是除了必須使用'this-> C()'來調用成員函數嗎? –

+0

這應該永遠不會發生在一個寫得很好的代碼片段中,因爲變量/參數名稱應該是*名詞/代詞*,而方法名稱應該是*動詞* – CinCout

+0

但是對於標誌,我看到變量/參數和函數在某些時間被賦予相同的名字。例如,要檢查標誌是否設置,函數'isSet()'並設置特定標誌'setStatus(bool isSet)'。也許這不是最好的做法。 – BAdhi

回答

3

什麼是陰影的成員函數的參數

後果的後果是,一個程序員誰讀代碼可能是混淆有關的實體是由C簡稱。他們可能已經習慣於C是一個成員函數,並且在B中合理地(但錯誤地)預期這種情況也是如此。

當參數不是int類型的參數時,其結果會更糟糕,但是可以使用與成員函數相同的參數調用某些其他類型的參數。然後,這個混淆的程序員會讀或寫C(),並期望它調用成員函數,但行爲會與預期不同。

相關問題