![](/img/trans.png)
[英]Why does “unsigned int” + “unsigned int” return an “unsigned int”?
[英]How does this right shifts work: stringstream >> unsigned int >> unsigned int?
我正在使用例子SFML游戲開發的書,我真的不知道這句話的作用。 我從來沒有見過這樣的東西
void Anim_Directional::ReadIn(std::stringstream& l_stream){
l_stream >> m_frameStart >> m_frameEnd >> m_frameRow
>> m_frameTime >> m_frameActionStart >> m_frameActionEnd;
}
在C ++中,他們獲得了“明亮”的想法,即使用流來重載右移和leftshift運算符以表示序列化/反序列化。
stream >> var
表示“從流中讀取var”。
對稱地
stream << var
意思是“把變成流”
“流”輸入或輸出的操作也會返回流,因此您可以鏈接以下操作:
stream >> var1 >> var2;
請注意,選擇“流式傳輸”只是因為外觀和優先級被認為是合理的,但它仍然只是一個重載的運算符,並暗示例如沒有嚴格的評估序列。 例如:
stream << f() << g();
可能是函數g
在函數f
之前被調用(有些令人驚訝)。
注意:在最后的C ++標准(C ++ 17)中通過錘擊這種特殊情況來處理排序問題。 雖然它一般不成立,但它保證了移位運營商(可能是出於這個特定原因)。 因此,在f()+g()
可f
被稱為遲於g
,但f()<<g()
這是不可能發生的。
C ++允許您重載>>
和<<
運算符。 std::stringstream
是衍生物std::istream
和它繼承了>>
的操作符重載std::istream
。
std::istream
對許多常見類型都有一堆重載。 你可以在這里找到它們的列表。
典型的std::istream
>>
運算符重載如下所示:
std::istream& operator>>(std::istream& stream, YourType& var) {
/*
** code here to parse and read a 'YourType' into 'var'
*/
/* var is set */
return stream; /* return the same stream to allow chaining */
}
當您執行some_stream >> YourType_object
,將調用匹配的>>
運算符重載。 在前面提到的情況下,我們的運算符重載是使用stream
參數調用some_stream
和var
獲取YourType_object
。
>>
overloads(和<<
overloads)也會智能地返回它們運行的流; 從而允許一系列>>
運營商被鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.