是否确实将变量隐式测试为0是最佳做法?为什么?

问题描述 投票:1回答:2

我正在阅读Bjarne Stroustrup的A Tour of C++,以复习我的C ++。

在第1章第1.8节中,Stroustrup写道:

[最常见的情况是针对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. 如果是这样,这是否与其他最佳做法以及强类型打字的基本目标相抵触?
c++ conventions
2个回答
2
投票
  1. 这种隐式转换样式在C ++开发社区中是否真的被视为最佳实践?

[C ++开发社区没有这样的东西,开发人员不同意一种一致的最佳实践。没错,if语句通常使用隐式转换为bool。毫无疑问,有些人不愿依赖它。

    如果是这样,这是否与其他最佳做法以及强类型打字的基本目标相抵触?
  • 取决于其他最佳做法和一般基本目标要达到的目标。
  • 通常,C ++在类型之间具有许多隐式转换,程序员甚至可以具有用户定义的类转换。语言具有隐式转换的事实意味着至少有人认为隐式转换是可以接受的。

    关于哪些隐式转换可以(以及在哪种上下文中)的意见不同。通常,参数归结为程序可能会被错误地解释,以及多少冗余的显式转换会引起代码相关部分不必要的注意。


    1
    投票
    这当然是一个意见问题,因此对于SO来说可能是题外话,但无论如何我都会给出答案。
    © www.soinside.com 2019 - 2024. All rights reserved.