我在basic_ostream
对象的write
方法读了,这就是我对cppreference发现:关于性病:: basic_ostream ::写
basic_ostream& write(const char_type* s, std::streamsize count);
表现为
UnformattedOutputFunction
。构造并检查哨兵对象后,输出字符数组中第一个元素由s
指向的连续位置中的字符。
- 恰好
count
字符插入- 插入输出序列失败(在此情况下
setstate(badbit)
称)
:直到以下情况之一时字符被插入到输出序列所以我得到它将一个缓冲区中的字符块写入流中。字符数是由count
指定的字节数。但是有一些我不确定的事情。这是我的问题:
我应该使用
write
只有当我想指定我想多少字节写入流?因为通常当您打印一个char
数组时,它将打印整个数组,直到达到空字节,但是当您使用write
时,您可以指定要写入多少个字符。char greeting[] = "Hello World"; std::cout << greeting; // prints the entire string std::cout.write(greeting, 5); // prints "Hello"
但也许我误解了这个东西。
而且我经常会看到这样使用
write
代码示例:stream.write(reinterpret_cast<char*>(buffer), sizeof(buffer));
为什么
reinterpret_cast
到char*
被使用?我应该何时知道在写入流时做类似的事情?
如果任何人都可以帮助我解决这两个问题,将不胜感激。
因此,通过您的解释,理论上你可以传递一个'bool *'到'reinterpret_cast'因为它也是一个字节? – 0x499602D2
@ 0x499602D2好点。这将是一种类型不匹配。 – greatwolf
@ 0x499602D2:它不会是一个类型不匹配......“布尔*”就像任何其他指针一样......它有一些字节数(对于32位应用程序通常是4,对于64位通常是8 ),你可以'reintrepret_cast'到'char *'并开始从存储'bool'的地址写入字节。在C++ 03中,“bool”的大小是未指定的,但C++ 11引入了默认和程序员控制......对它们没有特别的了解,特别是“bool *”不是某种指向(如果可能的话)转换成char *'怪异/有损)。 –