首页 > 解决方案 > C++ IO 运算符中的左关联性和优先级

问题描述

嗨,我想了解如何在 C++ 中评估表达式。我有一些疑问。上面写着

用于 IO 的运算符是左结合的。

现在给出两个例子:

示例1。cin>> v1 >> c2;

示例2。int i=0; cout<<i<< " "<< ++i <<endl;

说明在第一个示例中,我们先读入 v1,然后再读入 v2(我可以理解为从左到右)。现在在第二个例子的解释部分,写到第二个例子的输出表达式是undefined

我的问题是:

问题1. 为什么第二个示例的输出表达式未定义?

问题2. >> 不是 IO 操作符吗?如果它是 IO 运算符,他们为什么不遵循左关联规则。

还有一个例子如下:

示例3.int k = f1() * f2();

在示例 3 的情况下,它写道

我们无法知道 f1 是否会在 f2 之前被调用,反之亦然

问题3。现在我的第三个问题是我们知道算术运算符也是左结合的,那为什么我们不从左到右。我的意思是首先评估 f1(),然后评估 f2(),最后将它们相乘。

PS:我知道 f1() 和 f2() 具有相同的优先级。

标签: c++operator-overloadingoperatorsoperator-precedence

解决方案


推荐阅读