Apakah spesifikasi C ++ mendefinisikan:
- keberadaan operator 'kurang dari' untuk parameter boolean, dan jika demikian,
- hasil dari permutasi 4 parameter?
Dengan kata lain, apakah hasil dari operasi berikut ditentukan oleh spesifikasi?
false < false
false < true
true < false
true < true
Pada pengaturan saya (Centos 7, gcc 4.8.2), kode di bawah ini mengeluarkan apa yang saya harapkan (mengingat sejarah C yang menyatakan false sebagai 0 dan true 1):
false < false = false
false < true = true
true < false = false
true < true = false
Sementara saya cukup yakin kebanyakan kompiler (semua?) Akan memberikan output yang sama, apakah ini diatur oleh spesifikasi C ++? Atau apakah kompiler yang membingungkan, tetapi memenuhi spesifikasi yang diizinkan untuk memutuskan bahwa benar kurang dari salah?
#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
berarti p implies q
kapan p
dan q
dari tipe bool!
<=
mungkin secara tidak sengaja dibaca sebagai leftarrow, dan bahwa "hanya jika" (yaitu, "menyiratkan" secara material ") rightarrow kadang-kadang dikeset atau secara informal ditulis dengan cara yang sama =>
(yaitu, dengan poros berlipat ganda menyerupai =
) . Leftarrow bahkan kadang-kadang dibaca sebagai "jika," meskipun saya percaya ini jauh lebih jarang daripada penggunaan rightarrow untuk "hanya jika."
std::min
padastd::vector<bool>
sebagai&&
.