我真的应该大量引入 explicit 关键字吗?
Should I really massively introduce the explicit keyword?
当我在我的代码中使用(最近发布的)Cppcheck 1.69 时1,它在我预期的地方显示了很多消息none。禁用noExplicitConstructor
证明它们都是这种类型。
但我发现我不是唯一一个有很多新 Cppcheck 消息的人,看看 LibreOffice 的分析结果(我允许在 public 中展示):
有经验的程序员会做什么:
- 禁止检查?
- 大量引入
explicit
关键字?
1这当然不是我的代码但是我必须在工作中工作的代码,它是遗留代码: C 和 C++ 的几种(预)标准风格的混合(假设是 C++98),它是一个相当大的代码库。
我过去曾被隐式转换引入的性能影响以及彻底的错误所困扰。因此,我倾向于始终将 explicit
用于 all 构造函数,我不想参与隐式转换,以便编译器可以帮助我捕获错误 - 然后我尝试始终还向 ctors 添加“// implicit intended”注释,我明确打算将它们用作隐式转换 ctors。我发现这有助于我编写更正确的代码,减少意外。
… 所以我会说 "yes, go add explicit
" - 在很长一段时间内 运行 你会很高兴你做了 - 这就是我第一次了解它时所做的,我很高兴我做了。
当我在我的代码中使用(最近发布的)Cppcheck 1.69 时1,它在我预期的地方显示了很多消息none。禁用noExplicitConstructor
证明它们都是这种类型。
但我发现我不是唯一一个有很多新 Cppcheck 消息的人,看看 LibreOffice 的分析结果(我允许在 public 中展示):
有经验的程序员会做什么:
- 禁止检查?
- 大量引入
explicit
关键字?
1这当然不是我的代码但是我必须在工作中工作的代码,它是遗留代码: C 和 C++ 的几种(预)标准风格的混合(假设是 C++98),它是一个相当大的代码库。
我过去曾被隐式转换引入的性能影响以及彻底的错误所困扰。因此,我倾向于始终将 explicit
用于 all 构造函数,我不想参与隐式转换,以便编译器可以帮助我捕获错误 - 然后我尝试始终还向 ctors 添加“// implicit intended”注释,我明确打算将它们用作隐式转换 ctors。我发现这有助于我编写更正确的代码,减少意外。
… 所以我会说 "yes, go add explicit
" - 在很长一段时间内 运行 你会很高兴你做了 - 这就是我第一次了解它时所做的,我很高兴我做了。