Czy specyfikacji C++ określić:Czy operacja "false <true" jest dobrze zdefiniowana?
- istnienie „mniej niż” operatora dla parametrów logicznych, a jeśli tak,
- w wyniku 4 permutacji parametrów?
Innymi słowy, czy wyniki pochodzą z następujących operacji zdefiniowanych w specyfikacji?
false < false
false < true
true < false
true < true
Na mojej konfiguracji (CentOS 7, gcc 4.8.2), kod poniżej wypluwa, czego można oczekiwać (biorąc pod uwagę historię C w reprezentacji jako fałszywe i prawdziwe jak 0: 1):
false < false = false
false < true = true
true < false = false
true < true = false
Chociaż jestem całkiem pewny, że większość (wszystkich?) Kompilatorów da takie same wyniki, czy jest to zgodne ze specyfikacją C++? Czy jest to zaciemnianie, ale kompilator zgodny ze specyfikacją może zdecydować, że prawda jest mniejsza od fałszywej?
#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;
}
g ++ - 4.9.0 i clang ++ - 3.5.0 na Linuksie uważają, że to nic nadzwyczajnego: http://coliru.stacked-crooked.com/a/2174ebc466d0c445 – Deduplicator
@Ulterior Istnieją ważne zastosowania. Takie jak użycie 'std :: min' na' std :: vector 'jako' && '. –
Angew
@Jeśli znajdziesz dobre pytanie, które nie zostało jeszcze zadane po tylu latach StackOverflow, * zasługujesz na * kilka punktów. To nie trolling. –