"val ++"vs"val = val + 1"究竟有什么区别?

Bar*_*ğlu 3 .net short .net-assembly

我创建了一个基本的控制台应用程序来进行这样的测试

        short val = 32767;

        val++;

        Console.WriteLine(val);
Run Code Online (Sandbox Code Playgroud)

这给了我-32768作为预期结果

        short val = 32767;

        val = val +1;

        Console.WriteLine(val);
Run Code Online (Sandbox Code Playgroud)

但这给了我这个错误

错误1**无法将类型'int'隐式转换为'short'.存在显式转换(您是否错过了演员?)

我很好奇是什么导致了这个?

提前致谢,

Ant*_*ram 12

操作的结果short + short定义为int.在第一种情况下,编译器正在继续(short)并对增量的结果应用强制转换,但它不在第二种情况下.

short myShort = 1;
int resultA = myShort + myShort; // addition returns an integer
short resultB = myShort++; // returns a short, why? 

// resultB is essentially doing this
short resultB = (short)(myShort + 1);
Run Code Online (Sandbox Code Playgroud)

除了Joel在评论中提供的链接之外,您还可以参考C#4.0语言规范的 7.3.6.2节,其中列出了二进制数字促销的规则(包括表单的表达式a = b + c;)以及7.6.9.前缀和后缀运算符.