按常理想来,C++中bool类型的值哪怕不初始化也不会有什么问题,因为不是false就是true,可是今天在用boost的序列化库时,发现bool值必须初始化,在boost的序列化bool值的代码中,有这样一句代码
void save(const bool t){
BOOST_ASSERT(0 == static_cast<int>(t) || 1 == static_cast<int>(t));
当vs在运行时在这里报错后我很是纳闷,这个断言也能不通过?后来下断点后发现,t此时确实为true,但是此时
static_cast<int>(t)
的值居然是204,写boost的不愧是大师啊,如果此时序列化就会把204序列化到文件里去,导致错误。
可见bool值也一定要初始化,不然看似没问题,一旦转型或者序列化就会出问题。