hello world Asked:2023-09-28 22:22:14 +0800 CST2023-09-28 22:22:14 +0800 CST 2023-09-28 22:22:14 +0800 CST C++ 中的运算符优先级 772 如果您查看该表,您会发现自增和自减运算符的优先级高于逻辑运算符的优先级。 但是,这段代码将输出 100。 int x, y, z; x = y = z = 0; x++ && y++ && ++z; cout << x << y << z; 为什么一元运算的优先级较高时不先执行? c++ 2 个回答 Voted Harry 2023-09-28T22:26:31+08:002023-09-28T22:26:31+08:00 因为这是一个捷径计算。 x++ && ... 它等于什么x?零?但0 && ...它适用于任何事物false,因此无需根据标准计算其他所有内容。 好吧,我们不计算... Best Answer HolyBlackCat 2023-09-29T14:47:52+08:002023-09-29T14:47:52+08:00 运算符优先级并不严格指定计算顺序。粗略地说,它仅控制编译器如何在表达式中放置括号。 示例:a + b == c * d变成(a + b) == (c * d). 但括号并不强迫我们计数*,+这由编译器自行决定 但当然,括号稍微限制了求值的顺序,在某种意义上,在求值运算符之前,必须首先求值其参数(操作数),即 这里必须在和==之后进行计算。+* 但即便如此,除非另有说明,副作用(例如,由于 导致的值增加x++)可能会晚于简单地完成其计算而发生 - 您需要阅读https://en.cppreference.com/w/cpp/language/评估顺序)。请注意他们在这里如何描述它&&: ... && ... 的第一个(左)参数的每个值计算和副作用都在第二个(右)参数的每个值计算和副作用之前排序。 “计算”和“副作用”分开描述。
因为这是一个捷径计算。
它等于什么
x
?零?但0 && ...
它适用于任何事物false
,因此无需根据标准计算其他所有内容。好吧,我们不计算...
运算符优先级并不严格指定计算顺序。粗略地说,它仅控制编译器如何在表达式中放置括号。
示例:
a + b == c * d
变成(a + b) == (c * d)
. 但括号并不强迫我们计数*
,+
这由编译器自行决定但当然,括号稍微限制了求值的顺序,在某种意义上,在求值运算符之前,必须首先求值其参数(操作数),即 这里必须在和
==
之后进行计算。+
*
但即便如此,除非另有说明,副作用(例如,由于 导致的值增加
x++
)可能会晚于简单地完成其计算而发生 - 您需要阅读https://en.cppreference.com/w/cpp/language/评估顺序)。请注意他们在这里如何描述它&&
:“计算”和“副作用”分开描述。