gpt4 book ai didi

GCC 隐藏/鲜为人知的功能

转载 作者:行者123 更新时间:2023-12-04 12:13:49 30 4
gpt4 key购买 nike

这是我尝试开始收集通常不会遇到的 GCC 特殊功能。这是@jlebedev 在另一个问题中提到g++的“有效C++”选项之后,

-Weffc++ This option warns about C++ code which breaks some of the programming guidelines given in the books "Effective C++" and "More Effective C++" by Scott Meyers. For example, a warning will be given if a class which uses dynamically allocated memory does not define a copy constructor and an assignment operator. Note that the standard library header files do not follow these guidelines, so you may wish to use this option as an occasional test for possible problems in your own code rather than compiling with it all the time.



还有哪些很酷的功能?

最佳答案

有时我会浏览当前的 GCC/G++ 命令行参数文档并更新我的编译器脚本,使其对任何类型的编码错误更加偏执。 Here it is如果你感兴趣。

不幸的是,我没有记录它们,所以我忘记了大部分,但是 -pedantic、-Wall、-Wextra、-Weffc++、-Wshadow、-Wnon-virtual-dtor、-Wold-style-cast、-Woverloaded-virtual 和一些其他人总是有用的,警告我潜在的危险情况。我喜欢可定制性的这一方面,它迫使我编写干净、正确的代码。它对我很有帮助。

然而,他们并非没有头疼的问题,尤其是 -Weffc++。仅举几个例子:

  • 如果我的类中有指针成员,它需要我提供一个自定义的复制构造函数和赋值运算符,因为我使用垃圾回收,所以这些都是无用的。所以我需要声明它们的空私有(private)版本。
  • 我的 NonInstantiable 类(它防止任何子类的实例化)必须实现一个虚拟的私有(private) friend 类,因此 G++ 不会提示“只有私有(private)构造函数而没有 friend ”
  • 我的 Final<T>类(如果 T 从它虚拟派生,则防止 T 的子类化)必须将 T 包装在私有(private)包装类中以将其声明为 friend ,因为标准完全禁止与模板参数成为 friend 。
  • G++ 识别出从不返回返回值的函数,而是抛出异常,并提示它们没有用 noreturn 属性声明。隐藏在始终真实的指令后面是行不通的,G++ 太聪明了,认出了它们。我花了一段时间才想出声明一个变量 volatile 并将其与它的值进行比较,以便能够不受干扰地抛出该异常。
  • 浮点比较警告。天啊。我必须通过写 x <= y 和 x >= y 而不是 x == y 来解决它们,这是可以接受的。
  • 阴影虚拟。好的,这对于防止子类中出现愚蠢的阴影/重载问题显然很有用,但仍然很烦人。
  • 没有先前的函数声明。一旦我开始复制粘贴正上方的函数声明,它就失去了它的重要性。

  • 听起来可能有点自虐,但总的来说,这些都是非常酷的特性,增加了我对 C++ 和一般编程的理解。

    G++ 还有哪些其他很酷的功能?嗯,它是免费的、开放的,它是使用最广泛的现代编译器之一,始终优于其竞争对手,几乎可以吃掉人们扔给它的任何东西,几乎可以在每个平台上使用,可定制到 hell ,不断改进,拥有广泛的社区 -有什么不喜欢的?

    关于GCC 隐藏/鲜为人知的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5037804/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com