bool 类型的变量通常只有true和false两个值,使用的时候,我通常
bool vaule = true;
value = true;
value = false;
if ( value )
...
这样写没有任何问题,有时碰到特殊方法给bool类型变量赋值时就可能出错,比如写成下面这样
bool value;
char a = 3;
memcpy ( &value, &a, 1 );
if ( value )
cout << "true";
else
cout << "false";
value= !value;
if ( value)
cout << "true"
else
cout << "false"
按道理第一次是非0的,取反后第2次应该是0,即false,但并不一定如此,不同编译器会有不同结果,比如gcc就会是true,查看数值为2,应该是只把最低位取反了。在vc上没这个问题。
除了memcpy外,从文件读取一个bool的变量可能也有问题,假如文件出错的话,我就是遇到这个问题调试了半天才查出原因。
所以,当用非标准的方法给bool赋值时,最好检查一下,如
memcpy ( &value, &a, 1 );
if ( value)
value= true;
else
value= false;
这样在后面代码的使用中就不会有问题了