cout<<(x++)++; //fails
cout<<++(++x); //passes
なぜポストインクリメントが失敗するのですか?私はそれが起こるのを見るが、技術的な理由は不明である。ポストインクリメント演算子++
cout<<(x++)++; //fails
cout<<++(++x); //passes
なぜポストインクリメントが失敗するのですか?私はそれが起こるのを見るが、技術的な理由は不明である。ポストインクリメント演算子++
x++
はrvalueを返しますので、再度++
を実行することはできません。一方、++x
は左辺値を返しますので、++
を実行できます。
[この質問を参照](http://stackoverflow.com/questions/371503/why-is-i-considered-an-l-value-but-i-is-not) – Benoit
これは、インクリメント演算子がC/C++でどのように機能するかを示しています。
変数の後に(後置インクリメントの)++
を置くと、式全体がの値になり、がインクリメントされます。
変数(接頭辞増分)の前に++
を置くと、式は増分演算後の値になります。
接頭辞操作は渡された変数への参照を返しますが、接尾辞バージョンは一時的な値を返しますが、これは増分してはいけません。
正確に。 Rvalueに対して++を実行することはできません。右辺値がどのように働くかについての良い説明はhereです。
一時的にポストインクリメント? – Benoit
'x'の種類は何ですか?それは大変重要です。ビルトインの場合、 'operator ++'は関数呼び出しではありません。 – MSalters
その組み込み関数、int x = 5; – user835194