运营商关联性和评估顺序

时间:2014-02-05 21:01:47

标签: c++ c undefined-behavior operator-precedence associativity

我从这里和那里读过,从stackoverflow和其他网站上看,表达式评估依赖于运算符的运算符优先级和关联性。问题是我从某个着名的网站上读过这条线:优先级和关联性与评估顺序无关。好的,但是我在教育网站上读过这一行:数据类型和表达式的值取决于操作数的数据类型和运算符的评估顺序,这取决于运算符的优先级和关联性。 / p>

好的,我很困惑。我知道编译器可以以不同的顺序评估相同优先级的运算符以进行优化,我认为,因此行为未定义评估将以何种顺序发生。这意味着它可以改变整个表达式,如果没有任何副作用,或者只有一个副作用,结果将是相同的。还是我错了?如果我是对的,那么为什么他们定义了运算符的关联性,如果在大多数情况下评估的顺序是不确定的,除了在赋值链,逻辑短路运算符和我认为的其他一些情况之外。

简而言之:评估的顺序是否依赖于关联性。如果是,那么你可以解释一下吗?如果它不依赖于关联性,那么为什么它们首先定义关联性,它是仅用于解析阶段,而不是用于评估阶段?我见过关联性的唯一地方是三元运算符。 并且为什么关联性不适用于运算符重载,例如对于运算符<<在cout中我们得到未定义的行为,因为函数参数的评估顺序是未定义的?

0 个答案:

没有答案