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

时间:2013-03-13 10:06:10

标签: java c++ visual-c++ g++

考虑针对Java发布的SO问题How does the +++ operator work?

我明白了

  1. 没有像'+++'这样的运算符只是一个后缀修改增量后跟一个中缀添加
  2. 这是一种可读性犯罪
  3. 我想知道的(仅仅是为了好奇)IF

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

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

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

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

    的事实
    '+++' its just a post-fix increment followed by an infix add
    

    而不是

    '+++' its just an infix add followed by a prefix increment
    

1 个答案:

答案 0 :(得分:15)

是的,最大咀嚼规则告诉我们+++被解析为++ +(不是后缀后跟中缀,而是后缀后跟+运算符),也呈现

1+++x  <----> 1++ + x

非法,因为1不是左值。