wayne 发表于 2024-6-15 20:37:21

楼上说的有道理, 主要是词法分析。是一元运算符的解析。
大概逻辑就是 从左往右开始,缓存一个历史字符进行判断,如果连续两个字符相同,视为一个 双字符的一元运算符,即自增,自减,于是紧随着的下一个必须是可以修改的左值表达式(不是就报错)。如果紧挨着的是不同的字符,视为 两个 单字符的一元运算符。
#include <iostream>
int main()
{
    int i=4;
    // std::cout << --+i<<","<<i<< std::endl;
    // std::cout << ---i<<","<<i<< std::endl;
    // std::cout << ++-i<<","<<i<< std::endl;
    // std::cout << +++i<<","<<i<< std::endl;
    std::cout << -++i<<","<<i<< std::endl;
    std::cout << -+-i<<","<<i<< std::endl;
    std::cout << +--i<<","<<i<< std::endl;
    std::cout << +-+i<<","<<i<< std::endl;
    std::cout << -+-+-+i<<","<<i<< std::endl;
    return 0;
}
如上,注释掉的是不合法的。

ejsoon 发表于 2024-6-24 06:11:15

神奇的發現。

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

https://ejsoon.win/cpp-built-in-operators-precedence-and-associativity/
页: 1 [2]
查看完整版本: 为什么 -++i 可以编译,而 ---i 却不可以?