【发布时间】:2011-12-10 08:41:56
【问题描述】:
有人能告诉我前缀/后缀运算符是如何工作的吗?我一直在网上寻找很多,但没有找到任何东西。
据我所知,prefex 首先递增,然后执行操作,然后分配。
Postfix 会先做运算,然后赋值,再递增。
但是我的代码有点问题:
int x, y;
x = 1;
y = x + x++; // (After operation y = 2)(x=2)
但是当我这样做时:
y = x++ + x; // (After operation y = 3)(x=2)
我不确定为什么这些操作会有所不同。我有两个问题:
你能解释一下区别吗?
这如何应用于其他运算符前缀?
【问题讨论】:
-
您真正对哪种语言感兴趣? C# 和 C 在这里的工作方式可能非常不同......
-
@VladLazarenko 不,不是,因为您只修改 x 一次。
-
@LuchianGrigore:它确实是一个 UB,因为这里没有定义参数的评估顺序。
-
@timmy:C# 对操作发生的顺序做出了更多保证。
-
简短建议:不要使用它们,除非作为 x = x+1 的快捷方式。考虑代码的可读性。
标签: c# c++ c sequence-points