为什么你不能连锁运营商?
int test = 5;
test++++;或
int test = 5;
++test++;这段代码给出了编译时错误。
增量或递减运算符的操作数必须是变量、属性或索引器。
我完全理解,如果允许的话,这将是一个完整的代码气味,几乎没有实际的使用。我不完全明白为什么这会导致错误。我几乎可以预期,在每个语句之后,test的值为7。
发布于 2015-03-04 17:00:14
基本上,这要归功于规范的7.6.9节:
后缀增量或递减操作的操作数必须是归类为变量、属性访问或索引器访问的表达式。操作的结果是与操作数类型相同的值。
第二句意味着i++被归类为值(而不是变量,不像i),第一句不再是运算符的操作数。
我怀疑它是为简单而设计的,是为了避免你真的不想进入的奇怪情况--不仅仅是你已经给出的代码,而是类似这样的东西:
Foo(ref i++);
i++ = 10;发布于 2015-03-04 16:23:26
++运算符工作在一个“左手值”上,即一个人可以赋值的东西,因为它相当于:
test = test + 1;另一方面,test++是一个表达式,您不能为它分配一些东西,test++ =5不起作用。
这就是(test++) ++不能工作的原因。
发布于 2015-03-04 16:40:07
++是一个特殊的运算符,它只是foo = foo + 1的速记。当您只需说foo = foo + 7时,创建一个无限的重载列表(如+++、++++等)是没有意义的,而这正是我们必须做的。
所以简单地说,这是不值得付出的努力。没有它也没那么难,特别是对于+=操作符。而且它更易读。更容易理解的是:
int test = 1;
test+++++;或者..。
int test = 1;
test += 5;数数所有这些额外的迹象将是一种痛苦的阅读。2看得清楚。更重要的是,你将在50到50的抽奖中计算果冻豆。:-)
https://stackoverflow.com/questions/28859460
复制相似问题