首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作"false < true“定义良好吗?

操作"false < true“定义良好吗?
EN

Stack Overflow用户
提问于 2014-10-01 14:40:30
回答 3查看 13K关注 0票数 154

C++规范是否定义:

  1. 布尔参数的“小于”运算符的存在,如果存在,
  2. 4参数排列的结果?

换句话说,规范是否定义了以下操作的结果?

代码语言:javascript
复制
false < false
false < true
true < false
true < true

在我的设置(Centos 7,gcc 4.8.2)中,下面的代码显示了我的预期(考虑到C将false表示为0,true表示为1):

代码语言:javascript
复制
false < false = false
false < true = true
true < false = false
true < true = false

而我很确定大多数人(全部?)编译器将提供相同的输出,这是由C++规范制定的吗?或者是一个模糊的,但符合规范的编译器允许决定真是不是假?

代码语言:javascript
复制
#include <iostream>

const char * s(bool a)
{
  return (a ? "true" : "false");
}

void test(bool a, bool b)
{
  std::cout << s(a) << " < " << s(b) << " = " << s(a < b) << std::endl;
}

int main(int argc, char* argv[])
{
  test(false, false);
  test(false, true);
  test(true, false);
  test(true, true);
  return 0;
}
EN

回答 3

Stack Overflow用户

发布于 2014-10-01 14:42:38

布尔值受通常整数提升的限制,false定义为0true定义为1。这使得所有的比较都有了明确的定义。

票数 63
EN

Stack Overflow用户

发布于 2014-10-01 14:53:35

根据C++标准(5.9关系操作符)

2通常的算术转换是在算术或枚举类型的操作数上进行的。

1...The类型的结果是bool。

和(3.9.1基本类型)

6类型bool的值要么为true,要么为values。49注意:没有符号、无符号、短或长的bool类型或值。-end注意到bool类型的值参与积分促销 (4.5)。

和(4.5综合晋升)

6类型bool的prvalue可转换为int类型的prvalue,其中false为0,true为1

因此,在所有示例中,true转换为int 1,false转换为int 0。

这些表达式

代码语言:javascript
复制
false < false
false < true
true < false
true < true

完全等同于

代码语言:javascript
复制
0 < 0
0 < 1
1 < 0
1 < 1
票数 22
EN

Stack Overflow用户

发布于 2014-10-02 09:03:17

布尔false等价于int 0,布尔true等效于int 1。这就解释了为什么表达式false < true => 0 < 1是唯一返回true的表达式。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26143976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档