【问题标题】:Does boolean true ever return 0? [duplicate]boolean true 是否会返回 0? [复制]
【发布时间】:2015-04-30 23:16:48
【问题描述】:

我在一次演讲中,在幻灯片上声明 true 将返回 0,false 将返回 1。我说过在 Visual Studio 中任何非零都被认为是 true,但是是否有 C++ 标准将 0 定义为 true ?

Visual Studio 的结果被认为是非标准的,但我怀疑它是。

bool tru = true; // returns 0
bool fal = false; // returns 1

【问题讨论】:

  • 什么版本的 Visual Studio?您能否提供一个完整的程序来重现该行为?
  • 我只是在检查讲座是否有误。 Visual Studio 2013 中的行为是 1 == true 和 0 == false
  • 你确定他说的是函数返回值,而不是进程退出状态?
  • 示例中没有返回,所以不清楚他们指的是什么。
  • 换句话说,truefalse 等值不会返回任何内容,因此问题毫无意义。

标签: c++


【解决方案1】:

绝对不是。来自 C++14 工作草案(选择这里是因为我很容易找到它,而不是因为它特定于 C++14):

bool 类型的纯右值可以转换为 int 类型的纯右值,false 变为 0,true 变为 1。

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf §4.5.6(第 85 页)

事实上,这种行为在大多数编程语言中都很常见。例如,在我的脑海中,Perl、Python、PHP 和 Javascript 都将 0 视为假,将非零值视为真。我能想到 0 为“真”的唯一情况是在 UNIX shell 脚本中,退出代码 0 用于成功,非零值用于错误。

【讨论】:

  • 谢谢,我会努力改正讲座
  • 每个 C++ 标准 - 不仅仅是 C++14 - 都指定将 true 转换为 int 的值为 1,而 false 的值为 0。
【解决方案2】:

正如接受的答案here 中提到的,true 由标准定义为与1 进行比较,false0 进行比较:

(§4.7/4):“如果源类型为 bool,则值 false 转换为 0,值 true 转换为 1。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2015-06-21
    相关资源
    最近更新 更多