链增量运算符

时间:2015-03-04 16:19:20

标签: c# operators

为什么不能连锁经营者?

int test = 5;
test++++;

OR

int test = 5;
++test++;

此代码给出了编译时错误。

  

增量或减量运算符的操作数必须是变量,属性或索引器。

我完全理解这一点,如果允许,将是一个完整的代码味道,几乎没有真实世界的用法。我不完全理解为什么会导致错误。在每个陈述之后,我几乎都期望test的值为7。

3 个答案:

答案 0 :(得分:3)

++运算符处理“左手值”,即可以分配的东西,因为它等同于:

test = test + 1;

另一方面,test++是一个表达式,你不能给它分配东西,test ++ = 5不起作用。

这是(test++) ++不起作用的原因。

答案 1 :(得分:3)

基本上,这是由于规范的第7.6.9节:

  

后缀增量或减量操作的操作数必须是分类为变量,属性访问或索引器访问的表达式。操作的结果是与操作数相同类型的值。

第二句意味着i++被归类为(不是变量,与i不同),第一句话将其视为运算符的操作数

我怀疑它是为了简单而设计的,以避免您真正不想进入的奇怪情况 - 不仅仅是您给出的代码,还包括:

Foo(ref i++);
i++ = 10;

答案 2 :(得分:0)

++是一个特殊的运算符,它只是foo = foo + 1的简写。没有必要创建无限的重载列表,如+++,++++等。当你可以说foo = foo + 7时,这就是必须要做的事情。

  • 本身就是一个连接2个值的运算符。如果语言设计者试图将pull double duty作为一种特殊语法,就像你建议的那样,这对编译器来说是一个额外的负担,并可能导致一些令人困惑的代码。

所以基本上简短的回答是它不值得努力。没有它就没那么难,尤其是使用+ =运算符。而且它更具可读性。什么更容易阅读:

int test = 1;
test+++++;

或者....

int test = 1;
test += 5;

计算所有这些加号会很难读。 2清楚可见。更重要的是,你会在50-50抽奖活动中计算果冻豆。 : - )