找回密码
 欢迎注册
楼主: gxqcn

[讨论] 为什么 -++i 可以编译,而 ---i 却不可以?

[复制链接]
发表于 2024-6-15 20:37:21 | 显示全部楼层
楼上说的有道理, 主要是词法分析。是一元运算符的解析。
大概逻辑就是 从左往右开始,缓存一个历史字符进行判断,如果连续两个字符相同,视为一个 双字符的一元运算符,即自增,自减,于是紧随着的下一个必须是可以修改的左值表达式(不是就报错)。如果紧挨着的是不同的字符,视为 两个 单字符的一元运算符
  1. #include <iostream>
  2. int main()
  3. {
  4.     int i=4;
  5.     // std::cout << --+i  <<","<<i<< std::endl;
  6.     // std::cout << ---i  <<","<<i<< std::endl;
  7.     // std::cout << ++-i  <<","<<i<< std::endl;
  8.     // std::cout << +++i  <<","<<i<< std::endl;
  9.     std::cout << -++i  <<","<<i<< std::endl;
  10.     std::cout << -+-i  <<","<<i<< std::endl;
  11.     std::cout << +--i  <<","<<i<< std::endl;
  12.     std::cout << +-+i  <<","<<i<< std::endl;
  13.     std::cout << -+-+-+i  <<","<<i<< std::endl;
  14.     return 0;
  15. }
复制代码

如上,注释掉的是不合法的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-6-24 06:11:15 | 显示全部楼层
神奇的發現。

我此前也發現一個位運算的優先級的問題:

https://ejsoon.win/cpp-built-in- ... -and-associativity/
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-21 15:26 , Processed in 0.022362 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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