A especificação C ++ define:
- a existência do operador 'less than' para parâmetros booleanos e, em caso afirmativo,
- o resultado das 4 permutações de parâmetros?
Em outras palavras, os resultados das seguintes operações são definidos pela especificação?
false < false
false < true
true < false
true < true
Na minha instalação (Centos 7, gcc 4.8.2), o código abaixo mostra o que eu esperaria (dado o histórico de C de representar falso como 0 e verdadeiro como 1):
false < false = false
false < true = true
true < false = false
true < true = false
Embora eu tenha certeza de que a maioria dos compiladores (todos?) Fornecerá a mesma saída, isso é legislado pela especificação C ++? Ou um compilador ofuscante, mas compatível com as especificações, pode decidir que verdadeiro é menor que falso?
#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
significa p implies q
quando p
e q
é do tipo bool!
<=
pode ser inadvertidamente lido como uma seta esquerda e que o lado direito "somente se" (isto é, [implica materialmente ") às vezes é tipicamente digitado ou informalmente escrito de forma semelhante a =>
(isto é, com um eixo duplo semelhante =
) . Às vezes, uma seta esquerda é lida como "se", embora eu acredite que isso seja muito menos comum do que o uso de uma seta direita para "somente se".
std::min
emstd::vector<bool>
como&&
.