3

私は最近、return x++; の動作は?という質問をしました。定義された?

結果はほぼ予想どおりでしたが、同様の状況について考えさせられました。

私が書くとしたら

class Foo
{   
  ...   
  int x;   
  int& bar() { return x++; }
};

bar が int 参照を返すようになった場合、この動作は定義されていますか? 前の質問に対する答えが文字通り真であり、何が起こっているかを単に抽象化するだけではない場合、リターンが実行されるとすぐに破棄されるスタック変数への参照を返すように思われます。

それが単なる抽象化である場合、ポストインクリメントによって実際にどのような動作が保証されるかを知りたいと思います。

4

2 に答える 2

5

いいえ、一時的なものへの参照を返すことになるため、それはできません。

于 2010-03-06T02:00:10.440 に答える
0

あなたのコードはcompilation error. ただし、ポストインクリメントをプリインクリメントに変更すると機能します。の値xがインクリメントされ、この変更への参照xが返されます。

現在のコードの問題は、一時的なオブジェクトを変更しようとしていることであり、これは一時的なオブジェクトであるという理由で許可されていません。

右辺値参照に関するこのVisual C++ ブログ記事から

... C++ では、誤ってテンポラリを変更してほしくありません....

于 2010-03-06T02:14:19.483 に答える