tlg*_*tlg 0 c# c++ operator-precedence
我正在将C++实用程序移植到C#.当我在C++中运行以下语句时,我得到了正确的操作.当我在C#中运行相同的语句时,然而......

有谁知道为什么'开始++'被执行?疯狂的是,如果我在i = 0时运行(i%2)== 0,则立即窗口返回true.
Cod*_*aos 12
运算符优先级在此问题中无关紧要.它是导致此行为的评估顺序.
在C#i++之前进行评估,i % 2因为它在左侧.因此i % 2是错误的,并且if的右侧被评估.
首先使用优先级来获取语法树:
=
buffer[i++]
if i % 2
then temp[end--]
else temp[begin++]
Run Code Online (Sandbox Code Playgroud)
在每个节点上,您从左到右评估子项.这意味着i++之前会进行评估i % 2.
Eric Lippert在这方面有很多帖子,在SO和他的博客上:
就个人而言,我会避免这样的代码.将它分成多个表达式,甚至使用普通if语句代替它更好? :
在C++中,访问一个没有序列点的变量是未定义的行为.我认为=没有序列点,所以我猜你的表达式在C++中是未定义的,只是碰巧工作了.