C++流和运算符>>优先级
C++ stream and operator>> precedence
我有以下代码片段:
std::stringstream stream("ABC 123 CBA 321");
std::unordered_map<std::string, int> map;
std::string key;
我试着像这样读取数据:
stream>>key>>map[key];
可以重写为:
operator>>(stream, key).operator>>(map[key]);
考虑到>>
和.
操作符都具有从左到右结合性,请解释为什么map[key]
在从流中读取key
之前求值?
打印地图:
for(auto& it : map)
{
std::cout<<it.first<<" "<<it.second<<std::endl;
}
结果:
123
ABC 321
是的,123
结合性与此无关。结合性决定哪些操作数与哪些操作符绑定。它不确定以何种顺序计算操作数子表达式。所以当你说:
a >> b >> c;
结合性规定了操作数按(a >> b) >> c
分组,但没有规定表达式a、b和c的求值顺序。在c++ 17之前,这个顺序在标准中没有指定:这意味着a、b和C可以按任何顺序求值。从c++ 17开始,顺序定义为a,然后b,然后C。
换句话说,符合c++ 17的编译器将输出:
CBA 321
ABC 123
或者反过来,因为容器是std::unordered_map
,而不是像您显示的输出那样的混乱的单词。
相关文章:
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- EASTL矢量<向量<int>>连续的
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 打印优先级队列
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 排序数组优先级队列
- 更改运行时优先级队列的排序功能
- 优先级队列构造函数的工作
- 实现优先级队列
- 优先级队列功能比较
- C++ 带有函数指针的运算符优先级
- 将更高的优先级设置为 boost::asio 线程处理进程
- 在C++中打印对的优先级队列的所有值时出现问题
- <<运算符优先级与字符串比较
- SFINAE 模板专用化优先级
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 使用堆的优先级队列,具有相同键的值不遵循 FIFO(先进先出)