首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链增量算子

链增量算子
EN

Stack Overflow用户
提问于 2015-03-04 16:19:19
回答 3查看 528关注 0票数 3

为什么你不能连锁运营商?

代码语言:javascript
复制
int test = 5;
test++++;

代码语言:javascript
复制
int test = 5;
++test++;

这段代码给出了编译时错误。

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

我完全理解,如果允许的话,这将是一个完整的代码气味,几乎没有实际的使用。我不完全明白为什么这会导致错误。我几乎可以预期,在每个语句之后,test的值为7。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-04 17:00:14

基本上,这要归功于规范的7.6.9节:

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

第二句意味着i++被归类为值(而不是变量,不像i),第一句不再是运算符的操作数。

我怀疑它是为简单而设计的,是为了避免你真的不想进入的奇怪情况--不仅仅是你已经给出的代码,而是类似这样的东西:

代码语言:javascript
复制
Foo(ref i++);
i++ = 10;
票数 4
EN

Stack Overflow用户

发布于 2015-03-04 16:23:26

++运算符工作在一个“左手值”上,即一个人可以赋值的东西,因为它相当于:

代码语言:javascript
复制
test = test + 1;

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

这就是(test++) ++不能工作的原因。

票数 3
EN

Stack Overflow用户

发布于 2015-03-04 16:40:07

++是一个特殊的运算符,它只是foo = foo + 1的速记。当您只需说foo = foo + 7时,创建一个无限的重载列表(如+++、++++等)是没有意义的,而这正是我们必须做的。

  • 它本身就是一个连接两个值的运算符。如果语言设计人员试图像您所建议的那样,将双重任务作为一种特殊的语法,这将给编译器带来额外的负担,并可能导致一些令人困惑的代码。

所以简单地说,这是不值得付出的努力。没有它也没那么难,特别是对于+=操作符。而且它更易读。更容易理解的是:

代码语言:javascript
复制
int test = 1;
test+++++;

或者..。

代码语言:javascript
复制
int test = 1;
test += 5;

数数所有这些额外的迹象将是一种痛苦的阅读。2看得清楚。更重要的是,你将在50到50的抽奖中计算果冻豆。:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28859460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档