【问题标题】:Is it ok to assume 0 is false and 1 is true? [duplicate]可以假设 0 为假 1 为真吗? [复制]
【发布时间】:2015-11-17 12:17:38
【问题描述】:

我见过基于 int 变量而不是 bool 评估条件的代码。

int condition
cin >> condition;
if (!condition)
    //do something 

我知道 C++ 支持 0 为假,1 为真,但这是安全的代码吗?是否所有 C++ 编译器都将其作为标准支持?

考虑到您可能会切换到另一种语言并发现这种代码不受支持,这也是一种不好的做法吗?

我的意思是,这是一种好的做法吗?

【问题讨论】:

  • “良好实践”部分要么基于意见,要么过于宽泛,主题部分被欺骗了。
  • “我的意思是,这是一种好的做法吗?” - 答案是基于意见的,但是,我不想将 int 解释为 @987654323 @ 因为它经常导致不可预知的错误。

标签: c++ conditional


【解决方案1】:

是的,做出这样的假设是安全的。标准定义了各种原语到bool的隐式转换,所有数值类型基本上都说明0转换为false,任何非零值都转换为true

【讨论】:

  • 但是恕我直言,最好使用if(condition == 0) 直接查看发生了什么。
  • 附注:在 MS 的 VB6 中,true 明确定义为 -1 (0xFFFFFFFF)。 (只是说因为如果你必须做一些互操作可能会很乏味棘手)
  • @Stefan 这与C++ 问题有关吗?
  • @SimonKraemer:如上所述;如果您希望您的 C++ 程序集与 VB6 运行时通信,则它是相关的。当然在很多情况下情况并非如此,但我发现值得一提的是,并非每一方都会遵守0 = false; else = true 实施。 (由is this safe 部分触发)
  • @Stefan 我明白你在说什么,但不知道为什么。问题是关于纯粹的C++,既没有说明VB,也没有关于互操作性的任何内容。在我看来,这是您所指的一个非常特殊的情况,并且您的评论在某种程度上是题外话。顺便说一句:您的评论包含错误。在VB6 中,Boolean 值的大小为 2 个字节,而不是 4 个。
猜你喜欢
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 2011-09-29
  • 2012-08-27
  • 2015-05-05
  • 1970-01-01
  • 2015-12-05
相关资源
最近更新 更多