C和C ++中的几个一元运算符

Several unary operators in C and C++

使用诸如

1
2
int i = 1;
+-+-+i;

如何确定i变量的符号?


是的。一元+-从右向左关联,因此表达式被解析为

1
+(-(+(-(+i))));

结果产生了1

请注意,这些可能会被重载,因此对于用户定义的类型,答案可能会有所不同。


您的运算符没有副作用,+i与int本身无关,您不使用临时生成值,而是删除不做任何事情的+,您的-(-i)开关等于i。(代码中删除+将转换运算符,我的意思是在计算中删除它,因为它没有效果。CT)


EDCOX1 0不被修改(C:没有介入序列点C++):不合法的,所以它是合法的。您只是为每个运算符创建一个新的临时。

一元+甚至什么都不做,所以你所拥有的只是两个否定,这两个否定只给了1这个表达。变量i本身是不变的。