hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 1317|回复: 5

为什么 -++i 可以编译,而 ---i 却不可以?

[复制链接]

523

主题

523

帖子

1599

积分

大司空

Rank: 5Rank: 5

积分
1599
发表于 2023-12-28 02:30:32 | 显示全部楼层 |阅读模式
所讨论的语言为 C++

其中,i 是 整型数据类型,-++i 的结合性为从右到左,先算 ++i,而后取负;
++i 为自增运算,对等的自减运算为 --i,但为什么 ---i 却编译不过?

似乎将 ---i 解析成了 --(-i),-i 返回的是一个右值,而自减运算必须针对的是可修改的左值,所以报错。

抛出这个问题,不是推荐大家写出类似代码,该加括号就加括号,比如改写成 -(--i),
不仅提高可阅读性,也避免解析的结果与预期不符。

现在纯粹是讨论:为什么 -++i 可以,而 ---i 却不可以通过编译?
回复

使用道具 举报

0

主题

178

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-12-28 02:30:45 | 显示全部楼层
---i 表示-(--i)还是--(-i)呀?????????
能加括号就加括号,不要自己折腾自己!

还有,你的啥操作系统?啥编译器呀?
回复

使用道具 举报

0

主题

216

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-12-28 02:31:03 | 显示全部楼层
不懂就去看汇编,这个应该会吧!
回复

使用道具 举报

0

主题

178

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-12-28 02:31:40 | 显示全部楼层
还可以理解成-(-(-i)),你人都理解不了的东西,而况乎机器?
回复

使用道具 举报

0

主题

199

帖子

66

积分

关内侯

Rank: 2

积分
66
发表于 2023-12-28 02:31:56 | 显示全部楼层
你的 -++i ,机器是怎么理解的?
是-(++i),还是-(+(+i))?
回复

使用道具 举报

0

主题

178

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2023-12-28 02:32:27 | 显示全部楼层
-++i是-(++i),因为++是一个合法的运算,编译器不会去解释成+(+i)。
同样+--i也是合法的。
但---i和+++i这种,则存在语义模糊,因为存在两种合法的解释--(-i)和-(--i),这就要看编译器此法分析的顺序了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-11-24 16:16 , Processed in 0.069961 second(s), 22 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

快速回复 返回顶部 返回列表