C++规范是否定义:
换句话说,规范是否定义了以下操作的结果?
false < false
false < true
true < false
true < true在我的设置(Centos 7,gcc 4.8.2)中,下面的代码显示了我的预期(考虑到C将false表示为0,true表示为1):
false < false = false
false < true = true
true < false = false
true < true = false而我很确定大多数人(全部?)编译器将提供相同的输出,这是由C++规范制定的吗?或者是一个模糊的,但符合规范的编译器允许决定真是不是假?
#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;
}发布于 2014-10-01 14:42:38
布尔值受通常整数提升的限制,false定义为0,true定义为1。这使得所有的比较都有了明确的定义。
发布于 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。
这些表达式
false < false
false < true
true < false
true < true完全等同于
0 < 0
0 < 1
1 < 0
1 < 1发布于 2014-10-02 09:03:17
布尔false等价于int 0,布尔true等效于int 1。这就解释了为什么表达式false < true => 0 < 1是唯一返回true的表达式。
https://stackoverflow.com/questions/26143976
复制相似问题