我在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 *'怪異/有損)。 –