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