右移的工作方式是:stringstream >> unsigned int >> unsigned int?

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)

650*_*502 5

在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()这种情况下不会发生。