使用像这样的表达式是否符合标准
int i = 1;
+-+-+i;
以及如何确定 i 变量的符号?
是的。一元+
并-
从右到左关联,因此表达式被解析为
+(-(+(-(+i))));
这导致1
.
请注意,这些可以重载,因此对于用户定义的类型,答案可能会有所不同。
您的运算符没有副作用,+i
对 int 本身不做任何事情,并且您不使用临时生成的值,但删除+
它什么都不做,并且您的-(-i)
女巫等于i
它自己。(+
在代码中删除将转换运算符,我的意思是将其删除计算,因为它没有效果)
i
没有被修改(C:没有干预序列点|C++:以无序列的方式)所以它是合法的。您只是在为每个操作员创建一个新的临时对象。
一元+
甚至什么都不做,所以你所拥有的只是两个否定,它们只是给出1
那个表达式。变量i
本身永远不会改变。