4 回答

TA貢獻2012條經(jīng)驗 獲得超12個贊
避免名稱沖突的規(guī)則都是C ++標準(參見Stroustrup書)和C ++大師(Sutter等)提到的。
個人規(guī)則
因為我不想處理案件,并且想要一個簡單的規(guī)則,所以我設(shè)計了一個簡單而正確的個人案例:
命名符號時,如果您符合以下條件,則可避免與編譯器/ OS /標準庫沖突:
永遠不要用下劃線開始一個符號
永遠不要在里面用兩個連續(xù)的下劃線命名。
當然,將代碼放在一個唯一的命名空間中也有助于避免沖突(但不能防止惡意宏)
一些例子
(我使用宏,因為它們是C / C ++符號的代碼污染更多,但它可以是從變量名到類名的任何東西)
#define _WRONG#define __WRONG_AGAIN#define RIGHT_#define WRONG__WRONG#define RIGHT_RIGHT#define RIGHT_x_RIGHT
來自C ++ 0x草案的摘錄
從n3242.pdf文件(我希望最終的標準文本類似):
17.6.3.3.2全局名稱[global.names]
某些名稱和函數(shù)簽名集始終保留給實現(xiàn):
- 包含雙下劃線_ _或以下劃線后跟大寫字母(2.12)開頭的每個名稱都保留給實現(xiàn)以供任何使用。
- 以下劃線開頭的每個名稱都保留給實現(xiàn),以用作全局名稱空間中的名稱。
但是也:
17.6.3.3.5用戶定義的文字后綴[usrlit.suffix]
不以下劃線開頭的文字后綴標識符保留用于將來的標準化。
最后一個條款令人困惑,除非您認為如果未在全局命名空間中定義,以一個下劃線開頭并后跟一個小寫字母的名稱將為Ok ...

TA貢獻1911條經(jīng)驗 獲得超7個贊
至于問題的另一部分,通常將下劃線放在變量名的末尾,以免與內(nèi)部任何內(nèi)容發(fā)生沖突。
我甚至在類和名稱空間內(nèi)執(zhí)行此操作,因為我只需要記住一條規(guī)則(與“在全局范圍內(nèi)的名稱末尾,以及其他地方名稱的開頭”相比)。
- 4 回答
- 0 關(guān)注
- 1259 瀏覽
添加回答
舉報