在C#中使用多个运算符的奇数结果

Ale*_*zzi 1 c#

我正在使用Visual Studio 2010,今天我遇到了一个奇怪的错误.看看这段代码:

using System;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 5;
            int y = 10;
            int z = y - -x;
            Console.WriteLine(z);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

代码编译正常(没有错误,没有警告)并显示15!我认为这种行为有点奇怪.我不知道它是否应该是这样的.但是,您可以编写如此愚蠢的代码:

int z = y - - - + + + + - - - - - - - - x;
Run Code Online (Sandbox Code Playgroud)

注意运营商之间的空间很重要.z为5,因为加号符号没有任何效果,减号符号的数量是奇数.

有没有理由支持这种操作员行为?这是故意还是一种错误?要设置任何标志以至少获得警告?

干杯

Jon*_*eet 7

我根本没看到它有什么问题.它从10减去-5 - 即它使用一元运算符将5转为-5,然后使用二元运算符执行减法.我想不出任何类似的语言(C,Java的等),其中本的就不会是有效的.

我不认为这是一个错误,我非常怀疑有任何选择可以使这个警告.

我需要对这里的术语略微小心,但我认为运算符的绑定由它们的优先级控制,根据C#规范的7.3.1节.您可以将一元运算符视为"绑定更紧密"而不是二元运算符.