【问题标题】:Is using '!!' in C/C++ good practice and is it common? [duplicate]正在使用“!!”在 C/C++ 良好实践中,它很常见吗? [复制]
【发布时间】:2012-05-11 11:22:09
【问题描述】:

可能重复:
Double Negation in C++ code

据我所知,没有 C/C++ 书籍教程或手册提及此技术。可能因为只是一件小事,不值一提。

我使用它是因为 C/C++ 将 bool 类型与 int、long、pointer、double 等...混合在一起。需要将非布尔值转换为布尔值是很常见的。使用 (bool)value 来做到这一点是不安全的,所以我使用 !! 来做到这一点。

例子:

bool bValue = !!otherValue;

【问题讨论】:

标签: c++ c


【解决方案1】:

没关系,任何 C 或 C++ 程序员都应该识别它,但我更喜欢更明确的东西,比如

(x != 0)

【讨论】:

  • +1 代码越清晰越好
【解决方案2】:

我认为!! 与其他一些选择相比非常清楚,例如:

if (foo)
  bar = 1;
else
  bar = 0;

bar = foo ? 1 : 0;

由于!! 只做一件事,我觉得它非常明确。

【讨论】:

  • 嗯,我同意这没关系,但!!foofoo ? 1 : 0 模糊?我不能同意。
  • @EdS。呵呵,事实上,我发帖主要是为了反驳你的帖子——我不同意你的观点,并认为我们会让投票决定。到目前为止,您处于领先地位。 :)
  • 好吧,你来晚了,所以给它一些时间:D
  • 从不在 C++ 中使用它(我强制转换或隐式转换为 bool),但我在 C 中经常使用它。在我看来,!!x 是如此明显,我看到一个 !! 运算符,而不仅仅是两个 !s。
  • 也有人认为-->是自己的运营商... ;-)
【解决方案3】:

在这种情况下:

bool bValue = !!otherValue;

你不需要写!!。没有它们也能正常工作:

bool bValue = otherValue;

我认为在大多数情况下隐式转换会很好。

【讨论】:

  • 隐式转换(当它可能导致数据截断时)会导致编译器警告,显式转换(在这种情况下通过运算符)不会。
猜你喜欢
  • 2012-01-14
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 2019-01-12
相关资源
最近更新 更多