我正在阅读Bjarne Stroustrup的A Tour of C++,以复习我的C ++。
Stroustrup在第1章第1.8节中写道:
最常见的情况是针对0(或nullptr)测试变量。为此,只需省略对条件的明确提及。例如:
void do_something(vector<int>& v)
{
if (auto n = v.size()) {
// ... we get here if n!=0 ...
}
// ...
}
在我自己的代码中,我总是试图做到明确,并准确传达我的意图。我认为这被认为是一般的编程最佳实践。
作为这种方法的一部分,我考虑编写精巧的表达式,这些表达式的计算结果为逻辑true
或false
(而不是0
或nullptr
)。它还可以帮助避免隐式的强制转换错误。实际上,我认为现代C ++仅出于向后兼容的目的才允许这种隐式转换,并且实际上希望在新代码中不鼓励使用这种隐式转换。
与此同时,我相信Stroustrup在他的书中提出了社区普遍接受的最佳实践。
我的问题是:
- 这种隐式转换样式在C ++开发社区中是否真的被视为最佳实践?
- 如果是这样,这是否与其他最佳做法以及强类型化的总体基本目标相矛盾?