#include <stdio.h>
int main()
{
int i = 10;
printf("%d\n", ++(-i)); // <-- Error Here
}
何が問題になってい++(-i)
ますか?どうか明らかにしてください。
-i
++
一時を生成し、一時(右辺値式の結果として生成される)には適用できません。事前インクリメント++
では、オペランドが左辺値である必要がありますが、左辺値で-i
はないため、エラーが発生します。
++
演算子は変数をインクリメントします。(または、より正確には、左辺値-代入式の左側に表示される可能性のあるもの)
(-i)
は変数ではないため、インクリメントしても意味がありません。
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
}
代わりにこれを試してください:
#include <stdio.h>
int main()
{
int i = 10;
printf("%d\n", (++i) * -1);
}