c++ - 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() 具有相同的优先级。