我正在使用例子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
有许多常见类型的重载。你可以找到它们的列表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_stream
和var
取YourType_object
。
>>
重载(以及<<
过载)智能地返回它们运行的流;因此,允许一系列>>
运营商被链接。