9
#include <stdio.h>

int main()
{
   int i = 10;
   printf("%d\n", ++(-i)); // <-- Error Here
}

何が問題になってい++(-i)ますか?どうか明らかにしてください。

4

4 に答える 4

10

-i++一時を生成し、一時(右辺値式の結果として生成される)には適用できません。事前インクリメント++では、オペランドが左辺値である必要がありますが、左辺値で-iはないため、エラーが発生します。

于 2011-06-03T17:04:41.927 に答える
5

++演算子は変数をインクリメントします。(または、より正確には、左辺値-代入式の左側に表示される可能性のあるもの)

(-i)は変数ではないため、インクリメントしても意味がありません。

于 2011-06-03T17:04:30.130 に答える
1

IDを持たない一時的なものをインクリメントすることはできません。あなたはそれを増やすために何かにそれを保存する必要があります。l値は、式の左側に表示できるものと考えることができますが、最終的には、アイデンティティはあるが移動できないものとして考える必要があります(C ++ 0x用語) )。アイデンティティ、参照、オブジェクトを参照していることを意味します。これは、保持したいものです。

(-i)IDがないため、参照するものはありません。それを参照するものが何もないので、それに何かを保存する方法はありません。(-i)を参照できないため、インクリメントすることはできません。

i = -i+1を試してください

#include <stdio.h>

int main()
{
   int i = 10;
   printf("%d\n", -i + 1); // <-- No Error Here
}
于 2011-06-03T17:05:05.557 に答える
0

代わりにこれを試してください:

#include <stdio.h>

int main()
{
   int i = 10;
   printf("%d\n", (++i) * -1);
}
于 2011-06-03T17:06:40.400 に答える