是否针对0隐式测试变量真的被视为最佳实践?为什么?

我正在阅读Bjarne StroustrupA 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 ...
    }
    // ...
}

在我自己的代码中,我总是试图做到明确,并准确传达我的意图。我认为这被认为是一般的编程最佳实践。

作为这种方法的一部分,我考虑编写精巧的表达式,这些表达式的计算结果为逻辑truefalse(而不是0nullptr)。它还可以帮助避免隐式的强制转换错误。实际上,我认为现代C ++仅出于向后兼容的目的才允许这种隐式转换,并且实际上希望在新代码中不鼓励使用这种隐式转换。

与此同时,我相信Stroustrup在他的书中提出了社区普遍接受的最佳实践。

我的问题是:

  1. 这种隐式转换样式在C ++开发社区中是否真的被视为最佳实践?
  2. 如果是这样,这是否与其他最佳做法以及强类型化的总体基本目标相矛盾?
huanhuanelsie 回答:是否针对0隐式测试变量真的被视为最佳实践?为什么?

  1. 这种隐式转换样式在C ++开发社区中是否真的被视为最佳实践?

没有“ C ++开发社区”,开发人员也没有一致同意一套规范的最佳实践。

是的,隐式转换为bool实际上通常在if语句中使用。无疑,有些人不愿意依赖它。

  1. 如果是这样,这是否与其他最佳做法以及强类型化的总体基本目标相矛盾?

取决于其他最佳实践和一般基本目标要达到的目标。考虑到意见的广泛差异,一种最佳实践很可能与另一种最佳实践相矛盾。

通常,C ++在类型之间具有许多隐式转换,程序员甚至可以具有用户定义的类转换。该语言具有隐式转换这一事实意味着至少有人认为隐式转换是可以接受的。

关于哪些隐式转换可以(以及在哪些上下文中)的意见不同。通常,参数归结为程序可能如何被误解,以及过多的显式转换将不必要地引起人们对代码相关和重要部分的关注。

隐式转换只是平衡冗长与简洁以及显式与隐含维度之间的一种选择。

,

这当然是一个意见问题,因此对于SO来说可能是题外话,但无论如何我都会给出答案。

我更喜欢隐式测试,因为它既易于编写,又易于阅读,因此if(ptr)或if(!ptr)的意图立即显而易见(if(nullptr!= ptr的意图) )同样明显,但需要花费更多时间进行心理分析)。

同样,就像我更喜欢if(1 == value)而不是if(value == 1)一样,也很少有机会将隐式测试弄乱。 (偶然写出if(ptr = nullptr)很容易。)

本文链接:https://www.f2er.com/2467599.html

大家都在问