从这篇文章(不仅如此)中,我们了解到 ++ 运算符不能应用于返回值的表达式。很明显 5++ 写成 5 + 1 更好。我只想总结一下关于增量/减量运算符的整个事情。因此,让我们看一下这些代码片段,这些代码片段至少对第一次坚持使用 ++ 的人可能会有所帮助。
// Literal
int x = 0++; // Error
// Constant
const int Y = 1;
double f = Y++; // error. makes sense, constants are not variables actually.
int z = AddFoo()++; // Error
总结:++ 适用于变量、属性(通过合成糖)和索引器(相同)。
现在感兴趣的部分 - 任何文字表达式都在 CSC 中进行了优化,因此当我们编写时,说
int g = 5 + 1; // This is compiled to 6 in IL as one could expect.
IL_0001: ldc.i4.6 // Pushes the integer value of 6 onto the evaluation stack as an int32.
对于 5++ 并不意味着 5 变为 6,它可能是 5 + 1 的简写,例如 x++ = x + 1 这种限制背后的真正原因是什么?
int p = Foo()++ //? yes you increase the return value of Foo() with 1, what's wrong with that?
可能导致逻辑问题的代码示例值得赞赏。
现实生活中的一个例子可能是,执行比数组中的多一个动作。
for (int i = 0; i < GetCount()++; i++) { }
也许缺乏使用选择编译器团队来避免类似的功能?我不坚持这是我们缺乏的功能,只是想了解编译器编写者的阴暗面,尽管我不是。但我知道c++ 在方法中返回引用时允许这样做。我既不是一个 C++ 人(知识很差),只是想了解限制的真正要点。就像,仅仅是因为 c# 的人选择限制 ++ over value 表达式还是有确定的情况导致不可预测的结果?