首先,C++裏關於下劃線的問題是源於C語言,由於C++容許用extern 「C」來修飾代碼以C語言語法方式編譯。而後說C語言裏的下劃線:C語言確實容許如下劃線開頭的函數存在,實際上你用一個下劃線開頭的函數名或者變量是沒問題的,但有可能會發生命名衝突。凡是以兩個或一個下劃線開始,後面緊跟着一個大寫字母的標識符,無論它出如今哪裏,都是保留給編譯程序或標準庫函數使用的。此外,凡是以一個下劃線開始,後面無論跟着什麼內容的標識符,若是它出如今文件範圍內(即它不是出如今一個函數內),那麼它也是被保留的。若是你用一個保留的標識符來做一個變量的名稱,結果是沒有定義的(程序可能沒法編譯,或者能夠編譯但會崩潰)。即便你能很是幸運地找到一個目前尚未被你的編譯程序或函數庫使用的標識符,你也應該記住這樣的標識符是保留起來供未來使用的。所以,最好仍是避免使用如下劃線開始的變量名或函數名。舉例說明:VC裏getch函數不是一個標準庫函數,所以,它的名字是_getch,大多數編譯器都把非標準庫、但又是編譯器本身提供的庫函數如下劃線開頭。另外,也有編譯器的main函數在編譯完成之後,名字是_main,若是你本身寫了一個函數叫_main,那麼編譯器可能不知道最終該連接哪一個。因此,你能夠理解爲:編譯器須要預留一些名字,爲了方便起見,大多數編譯器預留的名字都是如下劃線開頭的,長此以往就造成了標準。雖然下劃線開頭也能夠用,但不推薦使用,由於容易形成名字衝突。markdown