我經常瀏覽當前的GCC/G ++命令行參數文檔,並更新我的編譯器腳本,使其更加偏執於任何類型的編碼錯誤。 Here it is如果你有興趣。
不幸的是,我沒有記錄它們,所以我忘記了大部分,但是 - 泛型,-Wall,-Wextra,-WeffC++,-Wshadow,-Wnon-virtual-dtor,-Wold-style-cast,-Woverloaded-virtual ,還有其他一些東西總是有用的,告訴我潛在的危險情況。我喜歡這種可定製的方面,它迫使我寫出乾淨,正確的代碼。它給了我很好的服務。
然而,他們並非沒有頭痛,尤其是-WeffC++。舉幾個例子:
- 它需要我提供一個自定義的拷貝構造函數和賦值操作符,如果我的類中有指針成員,這是因爲我使用垃圾回收而無用。所以我需要聲明它們的空私有版本。
- 我NonInstantiable類(這可以阻止任何的子類的實例),必須實現一個虛擬的私人朋友類,所以G ++不抱怨「只有私有構造函數且沒有朋友」
- 我
Final<T>
類(這可以阻止的T子類,如果T實際上是從它派生而來的)不得不將T包裝在一個私有包裝類中,以將其聲明爲朋友,因爲標準平坦禁止與模板參數友好。
- G ++識別永不返回返回值的函數,而是拋出一個異常,並聲明它們沒有用noreturn屬性聲明。隱藏在真正的指示背後並不奏效,G ++太聰明並且認可了它們。花了我一段時間想出一個變量volatile並將其與它的值進行比較,以便能夠毫無阻礙地拋出異常。
- 浮點比較警告。天啊。我必須通過編寫x < = y和x> = y而不是x == y來解決這些問題。
- 影子虛擬。好的,這對於防止子類中的愚蠢陰影/超載問題顯然是有用的,但仍然很煩人。
- 沒有先前的函數聲明。只要我開始在其上面拷貝功能聲明,就會失去它的重要性。
這可能聽起來有點受虐狂,但作爲一個整體,這些非常酷的功能增加了我對C++和一般編程的理解。
G ++還有哪些很酷的功能?好吧,它是免費的,開放的,它是最廣泛使用的現代編譯器之一,它始終勝過其競爭對手,幾乎可以吃到任何人投擲的東西,幾乎可以在任何平臺上使用,可定製到地獄,持續改進,擁有廣泛的社區 - 什麼是不喜歡?