是`+++`它只是一个后修复增量后跟一个中缀(总是)?

Abh*_*jit 3 c++ java g++ visual-c++

考虑为Java发布的SO问题+++运算符如何工作?

我明白了

  1. 没有类似'+++'的运算符只是一个后缀修改增量,后跟一个中缀添加
  2. 这是一种可读性犯罪

我想知道的(仅仅是为了好奇)IF

+++它只是一个后修复增量,后跟一个中缀添加,而不是 +++它只是一个中缀添加后跟一个前缀增量或其未定义的行为.

考虑我已经测试了以下程序

#include <iostream>
int main() {
    int x = 1;
    std::cout<< x+++1 << std::endl;
    std::cout<< 1+++x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

在VC++,gcc和g ++中,所有这些都符合这一事实

'+++' its just a post-fix increment followed by an infix add
Run Code Online (Sandbox Code Playgroud)

并不是

'+++' its just an infix add followed by a prefix increment
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 15

是的,最大的munch规则告诉我们+++解析为++ +(不是postfix后跟中缀,后缀是+操作符),这也是渲染

1+++x  <----> 1++ + x
Run Code Online (Sandbox Code Playgroud)

非法,因为1不是左值.

  • @Abhijit是的,确实如此,在[lex.pptoken]§3中."...否则,下一个预处理令牌是可能构成预处理令牌的最长字符序列,即使这会导致进一步的词法分析失败." (2认同)