这个权利转移如何工作:stringstream >> unsigned int >> unsigned int?

问题描述 投票:3回答:2

我正在使用例子SFML游戏开发的书,我真的不知道这句话的作用。我从来没有见过这样的东西

void Anim_Directional::ReadIn(std::stringstream& l_stream){
l_stream >> m_frameStart >> m_frameEnd >> m_frameRow
  >> m_frameTime >> m_frameActionStart >> m_frameActionEnd;
}
c++ sfml stringstream
2个回答
5
投票

在C ++中,他们获得了“明亮”的想法,即使用流来重载右移和leftshift运算符以表示序列化/反序列化。

stream >> var

表示“从流中读取var”。

对称地

stream << var

意思是“把变成流”

“流”输入或输出的操作也会返回流,因此您可以链接以下操作:

stream >> var1 >> var2;

请注意,选择“流式传输”只是因为外观和优先级被认为是合理的,但它仍然只是一个重载的运算符,并暗示例如没有严格的评估序列。例如:

stream << f() << g();

可能是函数g在函数f之前被称为(有点令人惊讶)。

注意:在最后的C ++标准(C ++ 17)中通过锤击这种特殊情况来处理排序问题。虽然它一般不成立,但它保证了移位运营商(可能是出于这个特定原因)。所以在f()+g()可能是f被称为晚于g,但在f()<<g()这不可能发生。


0
投票

C ++允许您重载>><<运算符。 std::stringstreamstd::istream的衍生物,它继承了>>std::istream算子重载。

std::istream有许多常见类型的重载。你可以找到它们的列表here

典型的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_streamvarYourType_object

>>重载(以及<<过载)智能地返回它们运行的​​流;因此,允许一系列>>运营商被链接。

© www.soinside.com 2019 - 2024. All rights reserved.