NMC*_*NMC 3 c++ stringstream sfml
我正在阅读《示例的SFML游戏开发》一书,但我并没有真正理解这句话的含义。我从未见过这样的事情
void Anim_Directional::ReadIn(std::stringstream& l_stream){
l_stream >> m_frameStart >> m_frameEnd >> m_frameRow
>> m_frameTime >> m_frameActionStart >> m_frameActionEnd;
}
Run Code Online (Sandbox Code Playgroud)
在C ++中,他们有了“聪明”的想法,即用流来重载右移和左移运算符以表示序列化/反序列化。
stream >> var
Run Code Online (Sandbox Code Playgroud)
表示“从流中读取var”。
对称地
stream << var
Run Code Online (Sandbox Code Playgroud)
意思是“将var放入流”
“流式处理”的输入或输出操作也将返回流,因此您可以链接以下操作:
stream >> var1 >> var2;
Run Code Online (Sandbox Code Playgroud)
请注意,选择“流”仅是因为外观和优先级被认为是合理的,但它仍然只是一个重载运算符,并且意味着例如没有严格的评估顺序。例如:
stream << f() << g();
Run Code Online (Sandbox Code Playgroud)
可能在function之前g被称为function (有点令人惊讶)f。
注意:排序问题是通过在最新的C ++标准(C ++ 17)中修改此特殊情况来解决的。虽然它通常不成立,但可以保证移位运算符(大概是由于这个特定原因)。因此in f()+g()可能被f称为晚于g,但是在f()<<g()这种情况下不会发生。