为什么x ++的优先级高于++ x?

Asp*_*Net 8 c#

后增量++运算符的优先级高于preincrement ++运算符是什么意思?因此,是否存在与++ x具有相同优先级的x ++会导致表达式返回错误结果的情况?

Eri*_*ert 17

让我们从定义一些术语开始,这样我们就可以谈论同样的事情了.

所述运算符是后缀"×++"和"x--",成员访问运算符"XY",该呼叫操作符"F(X)",阵列引用操作"一[X]",而新的typeof,默认,选中,取消选中和委托运营商.

一元运算符是"+ X", "-x", "〜X", "!X", "++ X", "--x"和演员"(T)×".

主要运算符定义的优先级高于一元运算符.

你的问题是

是否存在x ++与++ x具有相同优先级的情况会导致表达式返回错误的结果?

对于我来说,"错误的结果"在逻辑上是什么意思并不清楚.如果我们改变了优先级规则,使得表达式的值发生了变化,那么新结果将是正确的结果.正确的结果是规则所说的正确结果.这就是我们如何定义 "正确的结果" - 正确的结果是您在正确应用规则时获得的结果.

我们尝试设置规则,使它们很有用,并且可以很容易地表达您想要表达的含义.这就是"错误结果"的意思吗?也就是说,您是否在询问是否存在一种情况,即对正确答案的直觉是不正确的?

我向你提出,如果是这种情况,那么这不是一个有用的角度,因为几乎没有人对增量运算符的"正确"运算的直觉实际上与当前规范相匹配,更不用说一些假设的反事实规范了.在我编辑的几乎所有C#书中,作者都​​以一种微妙或粗略的方式错误地指出了增量运算符的含义.

这些是具有不寻常语义的副作用操作,它们来自一种语言 - C - 故意模糊的操作语义.我们已经在C#的定义中努力使增量和减量运算符合理且严格定义,但是不可能提出对每个人都有直觉意义的东西,因为每个人都对C和C++中的运算符有不同的体验. .

也许从不同角度处理问题会有所帮助.您的问题预先假定一个反事实世界,其中指定后缀和前缀++具有相同的优先级,然后在该反事实世界中要求批评该设计选择.但是有许多不同的方式可能发生.我们可以通过将两者都放入"主要"类别来使它们具有相同的优先级.或者我们可以通过将它们都放入"一元"类别来使它们具有相同的优先级.或者我们可以在主要和一元之间发明一个新的优先级.或者低于一元.或者高于初级.我们还可以改变运算符的关联性,而不仅仅是它们的优先级.

也许你可以澄清一下你想批评哪个反事实世界的问题.鉴于任何这些反事实,我可以批评这种选择如何导致代码不必要的冗长或混乱,但如果没有明确的反事实设计概念,你要求批评,我担心我会花很多时间批评除了你实际想到的东西之外的东西.

做出具体的设计改变,我们将看到它的后果.