簡體   English   中英

這個權利轉移如何工作:stringstream >> unsigned int >> 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_streamvar獲取YourType_object

>> overloads(和<< overloads)也會智能地返回它們運行的​​流; 從而允許一系列>>運營商被鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM