这两段代码有什么区别?

时间:2014-12-09 08:42:06

标签: c++

你能告诉我这两者有何不同吗?

int i = + +0;

int i = ++0; // compiler error

感谢。

2 个答案:

答案 0 :(得分:6)

第一个在第一个+和第二个+之间有一个空格,第二个没有'

这意味着第一个解析为一元前缀运算符+的两个实例,而后者解析为一元前缀运算符++(当然不能应用于文字)。

答案 1 :(得分:0)

这些声明中使用了两个不同的运算符。

在第一个声明中,使用了两次unary plus运算符。对于内置类型,它只返回其提升的操作数的值。所以事实上它没有任何意义就是这个宣言

int i = + +0;

相当于

int i = 0;

你甚至可以写

int i = + + + + + +0;

但结果不会改变。:)

在第二个声明中,使用了一元前缀增量运算符++。它可能不适用于右值。所以编译器会发出错误。

如果要再添加一个dclaration,将编译声明。例如

int j = 0;
int i = ++j;

在这种情况下,左值j可以递增。初始化表达式的结果将等于1,即i将被初始化为1,当然j本身也将等于1 ..

另外请注意,在上面的示例中,您可以在j之前编写任意偶数个加号。例如

int j = 0;
int i = ++++++++++++j;

但是你可以在j之后只使用一对加号。例如

int j = 0;
int i = j++++; // compilation error.

但这是另一个问题。:)

考虑到(C ++标准)

  

1带有一元运算符的表达式从右到左分组

和前缀增量运算符++和一元加运算符都是一元运算符。