我真的应该大量介绍显式关键字吗?

Wol*_*olf 7 c++ explicit legacy-code cppcheck

当我在我的代码1上使用(最近发布的)Cppcheck 1.69时,它显示了很多消息,我没有预料到;-)禁用noExplicitConstructor证明了所有这些消息都属于这种类型.

但是我发现我不是唯一一个有很多新的Cppcheck消息的人,看看LibreOffice的分析结果(我可以公开展示):

在此输入图像描述

有经验的程序员会做什么:

  • 取消支票?
  • 大量介绍explicit关键字?

1 编辑:这当然不是我的代码,而是我必须处理的代码,它是遗留代码:C和C++在几种(预)标准风格中的混合,并且它是一个相当大的代码库.

Jes*_*uhl 8

过去我被隐式转换引入的性能命中以及彻头彻尾的错误所困扰.所以我倾向于始终使用explicit所有,我不想参加的隐式转换的构造函数,这样编译器可以帮我赶上我的错误-然后我尝试总是还添加了"//隐意"评论到构建函数哪里我明确打算将它们隐含地用作转换ctors.我发现这有助于我编写更正确的代码,减少意外.

......所以我会说"是的,去补充explicit" - 从长远来看,你会很高兴你做到了 - 这就是我第一次了解它时所做的事情,我很高兴我做到了.

  • 谢谢你看这个。顺便说一句:如果您只使用评论,cppcheck 仍会发出警告。至于禁用它的警告,我使用内联抑制,所以我有一个关于有意隐式转换的功能注释。(到目前为止我最喜欢的答案;-)) (2认同)