你能告诉我这两者有何不同吗?
int i = + +0;
int i = ++0; // compiler error
感谢。
答案 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带有一元运算符的表达式从右到左分组
和前缀增量运算符++和一元加运算符都是一元运算符。