Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以在c+中的写函数中使用char*why not bool*+;文件I/O_C++_File_Io_Typecasting Operator - Fatal编程技术网

C++ 为什么可以在c+中的写函数中使用char*why not bool*+;文件I/O

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++中最

在这个语句中,为什么将x强制转换为char*而不是bool*-

out.write( (char*)&(x), sizeof(double) );

布尔值有两个值:true和false

除非缓冲区中的每个字节只有两个值中的一个,否则选择这种类型来表示任意数据将是非常愚蠢的

char
被视为传统的“某些字节”类型。因此,
char*
是传统的“指向某些字节的指针”类型

在此语句中,为什么将x强制转换为char*,而不是bool*

<> P>怀疑你认为, Boo.<代码>概念上是一个单一的比特,是C++中最基本的数据类型。事实并非如此。单独的位在C++中是不可寻址的。C++内存模型是围绕字节的概念组织的,它必须包含至少八位。根据定义,
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*
相反。