刚刚在做图形学程序的时候,因为要用到保存对象及相关的变量,我写了如下的代码:
if( ar.IsStoring() )
{
………
ar<<flag; //flag是一个bool型变量
}
else
{
ar>>flag;
}
原本以为这样是对的,但是编译程序的时候才发现这个错误:error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'bool' (or there is no acceptable conversion)。
查阅资料后才发现CArchive::operator >> 对bool型没重载。后来我将else里面的代码修改如下:
else
{
int flag;
ar>>flag;
}
程序编译通过了。在CSDN上的一篇文章中看到CArchive::operator >> 对bool型没重载, 必须换成BOOL 。才知道原来BOOL 型变量就是int类型的重定义。bool在C++里是占用1字节,而BOOL是int类型,int类型的大小是视具体环境而定的;所以来说:false/true只占用1个字节,而TRUE/FALSE视具体环境而言,原文对CArchive类在MSDN中做了详细的解释,这里不再详述。
以下是原文链接:http://blog.csdn.net/cpu_0dgree/article/details/2044977