Определяет ли спецификация 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>
как&&
.