C'est mon code:
#include <cstring>
#include <iostream>
int main() {
bool a;
memset(&a, 0x03, sizeof(bool));
if (a) {
std::cout << "a is true!" << std::endl;
}
if (!a) {
std::cout << "!a is true!" << std::endl;
}
}
C'sorties:
a is true!
!a is true!
Il semble que l' !
(opérateur) bool
seulement inverse de la dernière peu, mais chaque valeur n'est pas égale à 0
est considérée comme true
. Cela conduit à un comportement, qui est logiquement faux. Est qu'un défaut dans la mise en œuvre, ou la spécification de l'autoriser? Notez que l' memset
peut être omis, et le comportement serait probablement être le même parce que l' a
contient de la mémoire des ordures.
Je suis sur gcc 4.4.5, d'autres compilateurs peut le faire différemment.