1. ホーム
  2. c++

[解決済み] なぜ ++x は lvalue で x++ は rvalue なのですか?重複

2023-02-08 07:37:17

質問

lvalueとrvalueについて読んできましたが、次の違いについて少し混乱しています。 ++xx++ という分類になると

なぜ ++x はl値であり x++ はrvalueですか?

どのように解決するのですか?

++x はインクリメントしたオブジェクトへの参照を返しますが、 一方 x++ はオブジェクトの一時的なコピーを返します。 x の古い値の一時的なコピーを返す。

少なくとも、これは慣習的にこれらの演算子を実装するための "normal" 方法であるでしょう。そして、すべての組み込み型はこの方法で動作します。また、lvalues / rvalues について読んだことがあれば、prefix 演算子は名前の付いたオブジェクト自体を返すので lvalue になり、postfix 演算子はローカルテンポラリーのコピーを返すので rvalue として認められることがわかると思います。

注:また、現在ではprvaluesやxvaluesなどがあり、技術的にもう少し複雑になっています。 を参照してください。