C++ 为什么可以在c+中的写函数中使用char*why not bool*+;文件I/O
在这个语句中,为什么将x强制转换为char*而不是bool*-C++ 为什么可以在c+中的写函数中使用char*why not bool*+;文件I/O,c++,file,io,typecasting-operator,C++,File,Io,Typecasting Operator,在这个语句中,为什么将x强制转换为char*而不是bool*- out.write( (char*)&(x), sizeof(double) ); 布尔值有两个值:true和false 除非缓冲区中的每个字节只有两个值中的一个,否则选择这种类型来表示任意数据将是非常愚蠢的 char被视为传统的“某些字节”类型。因此,char*是传统的“指向某些字节的指针”类型 在此语句中,为什么将x强制转换为char*,而不是bool* P>怀疑你认为, Boo.概念上是一个单一的比特,是C++中最
out.write( (char*)&(x), sizeof(double) );
布尔值有两个值:true和false 除非缓冲区中的每个字节只有两个值中的一个,否则选择这种类型来表示任意数据将是非常愚蠢的
char
被视为传统的“某些字节”类型。因此,char*
是传统的“指向某些字节的指针”类型
在此语句中,为什么将x强制转换为char*,而不是bool*
<> P>怀疑你认为,char
(以及相关类型的signed char
和unsigned char
)正好是一个字节长
位不可寻址意味着布尔数据类型的概念不太适合内存模型。连续布尔值之间要么有间隙(这对于您建议的bool*
转换是有问题的),要么布尔值包含的值远不止false
和true
(也有问题;包含false
或true
以外的值的布尔值是未定义的行为)
C++的I/O模型将基于字节的内存模型扩展到I/O。C++ I/O流包括字节序列(有时在宽字符的情况下是多字节)而不是比特序列。这就是为什么代码> STD::Basic IoSoo::写< /COD>采用一些字符类型的指针(通常是代码> char < /代码>)和一个大小作为参数。
可能是由于BoL不是C++时的标准C类型,而Car *在C.中使用,为什么它应该是<代码> CHAR*<代码>是一个可以理解的问题。但是我不明白为什么你会期望它是bool*
。尤其是sizeof(double)
。你想用这些代码做什么?如何定义out
?为什么您希望bool*
有意义呢?另外,char*
通常是选择的,因为它访问单字节块中的数据。(与总是使用只能指向每四个字节的int*
相反。