Чи визначає специфікація 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 ++? Або компульсивний компілятор, який відповідає специфікаціям, може вирішити, що правда менша за помилкову?
#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
є тип булінгу!
<=
може бути ненавмисно прочитане як ліворуч, і що "тільки якщо" (тобто "[матеріально] має на увазі") "правда іноді набирається або неофіційно пишеться аналогічно =>
(тобто, з подвоєним валом, що нагадує =
) . Ліворука навіть іноді читається як "якщо", хоча я вважаю, що це набагато рідше, ніж використання прямокутниці для "лише якщо".
std::min
наstd::vector<bool>
як&&
.