2011-09-13 20 views
7
cout<<(x++)++; //fails 
cout<<++(++x); //passes 

なぜポストインクリメントが失敗するのですか?私はそれが起こるのを見るが、技術的な理由は不明である。ポストインクリメント演算子++

+2

一時的にポストインクリメント? – Benoit

+0

'x'の種類は何ですか?それは大変重要です。ビルトインの場合、 'operator ++'は関数呼び出しではありません。 – MSalters

+0

その組み込み関数、int x = 5; – user835194

答えて

13

x++はrvalueを返しますので、再度++を実行することはできません。一方、++xは左辺値を返しますので、++を実行できます。

+1

[この質問を参照](http://stackoverflow.com/questions/371503/why-is-i-considered-an-l-value-but-i-is-not) – Benoit

4

これは、インクリメント演算子がC/C++でどのように機能するかを示しています。

変数の後に(後置インクリメントの)++を置くと、式全体がの値になり、がインクリメントされます。

変数(接頭辞増分)の前に++を置くと、式は増分演算後の値になります。

接頭辞操作は渡された変数への参照を返しますが、接尾辞バージョンは一時的な値を返しますが、これは増分してはいけません。

1

正確に。 Rvalueに対して++を実行することはできません。右辺値がどのように働くかについての良い説明はhereです。

関連する問題