C ++规范是否定义:
- 布尔参数是否存在“小于”运算符,如果存在,
- 4个参数排列的结果?
换句话说,规范定义了以下操作的结果吗?
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 ++规范是否对此做了规定?还是允许混淆但符合规范的编译器确定true小于false?
#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;
}
p <= q
手段p implies q
时p
和q
为bool类型的!
<=
可能会无意间被读为左箭头,并且“仅当”(即“(实质上)暗示”)右箭头有时被排版或非正式地写成类似于=>
(即,双轴类似=
)。 。左箭头有时甚至被理解为“如果”,尽管我认为这远不如将右箭头用于“仅当”。
std::min
上std::vector<bool>
的&&
。