0

使用像这样的表达式是否符合标准

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

以及如何确定 i 变量的符号?

4

3 回答 3

5

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

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

这导致1.

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

于 2012-10-18T17:53:46.030 回答
1

您的运算符没有副作用,+i对 int 本身不做任何事情,并且您不使用临时生成的值,但删除+它什么都不做,并且您的-(-i)女巫等于i它自己。(+在代码中删除将转换运算符,我的意思是将其删除计算,因为它没有效果)

于 2012-10-18T17:56:51.697 回答
0

i没有被修改(C:没有干预序列点|C++:以无序列的方式)所以它是合法的。您只是在为每个操作员创建一个新的临时对象。

一元+甚至什么都不做,所以你所拥有的只是两个否定,它们只是给出1那个表达式。变量i本身永远不会改变。

于 2012-10-18T17:53:28.647 回答