我喜欢使用-Wsuggest-final-types
和-Wsuggest-final-methods
编译代码,以便在使用final
关键字时得到警告,从而允许编译器更积极地进行优化。
但是,有时候这些建议是不正确的--例如,我有一个类Base
,它带有一个virtual ~Base()
析构函数,而这个析构函数在另一个项目中以多态的方式使用,而gcc建议我可以将Base
标记为final
。
有没有办法“清楚地”告诉编译器Base
是以多态方式使用的,不应该标记为final
?
我能想到的唯一方法是使用#pragma
指令,但我发现这会使代码混乱,难以阅读。
理想情况下,我会寻找一个non-final
关键字或属性,它可以作为类/方法声明的前缀/后缀。
2条答案
按热度按时间jckbn6z71#
我提出了一个基于宏的解决方案,我真的不喜欢,但它解决了问题。
用法:
lf3rwulv2#
请允许我提出一个建议(这就是我如何解决这些警告问题)。
GCC documentation表示:
例如,-Wsuggest-final-types对于链接时优化更有效,并且除非启用了优化,否则可能根本不会发出其他警告的某些示例。
因此,要想不再显示此警告,只需将link time optimization功能添加到命令行。