我经常浏览当前的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 ++还有哪些很酷的功能?好吧,它是免费的,开放的,它是最广泛使用的现代编译器之一,它始终胜过其竞争对手,几乎可以吃到任何人投掷的东西,几乎可以在任何平台上使用,可定制到地狱,持续改进,拥有广泛的社区 - 什么是不喜欢?