C应该是0,C#应该是12。是不是呢?
是的呢。 那是为什么呢?
@Williame: 按照我的理解,首先在C里面,是从右到左,然后a只有一个地址在存值,所以先执行a-=a,此时a变成了0,导致执行a+=a时,a= a+a=0+0 = 0
在C#中,还是从右到左,但是a-=a的临时结果值,被放在的其他地方,导致执行 a+=x时,等价于a=a+0 = 12。
以上仅个人理解。
这个不会不一样吧?应该是0吧
确实不一样
1、需要实验,实验后就知道了。
2、这样的语句是从右到左执行的。
3、最终结果是受编译器限制的,可能是0,也可能是12。
4、不能简单的理解成(a+=(a-=a))
5、对于别人这样写,可能是基于特定的编译器,也可能是对结果本身不看重(当作可能的随机数看待)
6、自己如果不是基于5的原因,千万别这样写。
比如一段代码:
int a()
{
int index = 0;
try
{
index ++;
return index;
}
finaly
{
index++;
}
}
结果应该是1还是2呢?也是受编译器限制的(当然一般都是1)。
另外一段代码(js的):
foo = {a:1}
foo.x=foo={a:2}
请问:foo.x是多少?
这个也是很有意思的。
}
是挺有意思, 所以我才来问了嘛
@Williame: 如果不是专注于编译原理,一般这样的问题,我都是当作兴趣来看看,然后使用没有歧义的语法来编写代码。
这个是和编译器里面的处理机制有关系的,不管你用C还是C# ,不同编译器出来的结果可能不同。我以前也遇到这个问题,而且还是用的相同的编译器,VS2010和VS2013出来结果也不同
是的
股票上涨全世界都是绿的,红的是下跌。
只有某国是红的上涨,绿的下跌。
语义的不同本来就是看谁来解释。
哈哈,所以我想知道它们各自怎么实现的