使用bool 类型变量赋值时的一个错误
2008-11-05 11:57
399 查看
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;
这样在后面代码的使用中就不会有问题了
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;
这样在后面代码的使用中就不会有问题了
相关文章推荐
- 在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)
- Windows 中线程同步轮询检查一个变量的错误使用
- SqlServer中使用Select语句给变量赋值的时候需要注意的一个问题
- mysql中各种类型变量的定义以及赋值使用
- javascript !!的作用是把一个其他类型的变量转成的bool类型
- Bool 类型变量的使用
- 关于uint64_t类型变量赋值,防止overflow错误
- C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误
- SQL不是同一类型的变量赋值最好转换成统一类型,否则引起莫名错误
- 1.在使用new创建数组后,此时数组还是一个引用数组。 只有再创建新的对象,并把对象赋值给数组引用,到此初始化结束2.什么是引用类型?
- 使用临时表与声明一个表数据类型的变量有什么区别
- c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic
- mysql 变量名称的使用不当的一个错误
- mysql中各种类型变量的定义以及赋值使用
- 多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量
- Oracle bug 使用max或min函数into到一个char类型报字符缓冲区太小的错误
- 使用交换函数交换两个变量的值(以int类型为例)的错误用法以及正确用法
- C#新手入门代码 在控制台中通过输入给一个double类型变量赋值
- C语言学习2:sizeof ,数据类型,scanf,算式操作,赋值与比较操作,逻辑操作,位的操作,条件运算符,特异赋值结果,强制转换,使用变量要注意的
- c#使用CsGL时一个小错误:“CsGL.OSLib”的类型初始值设定项引发异常 产生的原因