2011-11-02 50 views
6

在我們的項目中,我們決定使用下劃線爲成員變量和一些私有/受保護方法加上前綴(因此使用「_」)。以下劃線開頭的類成員(_)

在討論過程中,有人聲稱由於某些平臺上的某些編譯器/鏈接器存在某些不兼容問題,所以不鼓勵這樣做。因爲我們希望儘可能便攜,所以我想確保。

我也估計that prefixing globals with underscores in C可能是個問題。

這同樣適用於C++ - 鏈接,如果是這樣,在哪些情況下(平臺/編譯器/鏈接器)?

回答

11

從C++ 03標準:§17.4.3.1.2/ 1

名稱和功能特徵的一組特定總是保留給實現:

  • 每名包含雙下劃線(__)或以下劃線開頭,後面跟着大寫字母(2.11),保留給實施用於任何用途。

  • 以下劃線開頭的每個名稱都保留給實現以用作全局名稱空間中的名稱。

等效文本存在於C++ 11§17.6.4.3.2/ 1

+8

+1。換句話說,OP的使用是安全的*,只要*這些成員不以大寫字母開頭。但是我總是建議不要使用前面的下劃線,因爲這太容易意外地違反這裏顯示的規則之一。 – jalf

+1

完全同意@jalf。如果你想,使用不同的前綴,如「m_」... –

+3

這些是官方規則。在過去,我遇到了系統頭文件中的宏問題,這些宏也匹配以下劃線開頭的名字,後面跟着一個小寫字母。作爲一般規則,爲了便於閱讀,避免在符號的任何一端加下劃線。 –

4

我個人用的是m_name,'m'代表'member'。

順便說一句,我也使用p_作爲我函數的參數,g_作爲幾個不可避免的全局變量。

(然後我通常會用這樣用戶撞壞,因爲它看起來像匈牙利命名法;-)但事實並非如此。)

+2

和downvoted;) – mlvljr

+3

@mlvljr感謝這個建設性的評論,幫助我和社區;)這不是匈牙利的符號,但是被教導的人「匈牙利符號是壞的」並且沒有考慮地應用這個規則就被誤認爲是這樣。 – Offirmo

+0

我真的懷疑查爾斯西蒙尼的創作可能是「壞」,順便說一句(可能是那些沒有想到,雖然) – mlvljr

相關問題