大概逻辑就是 从左往右开始,缓存一个历史字符进行判断,如果连续两个字符相同,视为一个 双字符的一元运算符,即自增,自减,于是紧随着的下一个必须是可以修改的左值表达式(不是就报错)。如果紧挨着的是不同的字符,视为 两个 单字符的一元运算符。
#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;
}
如上,注释掉的是不合法的。
。 神奇的發現。
我此前也發現一個位運算的優先級的問題:
https://ejsoon.win/cpp-built-in-operators-precedence-and-associativity/
页:
1
[2]