gpt4 book ai didi

C++ 流和运算符 >> 优先级

转载 作者:行者123 更新时间:2023-11-28 02:00:51 25 4
gpt4 key购买 nike

我有以下代码片段:

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 是从流中读取的吗?

打印 map :

for(auto& it : map)
{
std::cout<<it.first<<" "<<it.second<<std::endl;
}

结果:

 123
ABC 321

是的,123前有一个空格

最佳答案

关联性在这里无关紧要。结合性决定哪些操作数绑定(bind)到哪些运算符。它不决定计算操作数子表达式的顺序。所以当你说:

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++ 流和运算符 >> 优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39610477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com