![](/img/trans.png)
[英]Why does “unsigned int” + “unsigned int” return an “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_stream
和var
获取YourType_object
。
>>
overloads(和<<
overloads)也会智能地返回它们运行的流; 从而允许一系列>>
运营商被链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.