2011-09-07 12 views
12

私はいくつかのコードで別のバグを修正していました。しかし、このコードはgcc 4.4,4.5、および4.6の下でコンパイルされ、 "期待どおりに"機能するように見えます。これは有効なC + +の場合誰も私に教えてくれる?値によって戻り値がconst参照に割り当てられました

これが有効なC++の場合、誰でもこの法的根拠の根拠を知っていますか?

+3

標準的な論理的根拠はここに記載されています:[GotW#88:候補者の "最も重要なconst"](http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-最も重要なconst /)。 – ildjarn

+0

また、これが正当なC++であることをサポートする標準語は、C++ 03§12.2/ 5にあります。 – ildjarn

+0

ありがとう、私はいくつかのC + +を今日学んだ。それは理にかなっていますが、以前はこれを使用したことがなく、非const参照へのリターンは許されませんでした。 – graphicsMan

答えて

24

はい、これは正式なC++です。一時的な参照への参照を形成することは、一時的な有効期間を参照の存続期間まで延長する。

-1

私はまだ注意する必要があると思います。私はg ++ - 4.9とC++ 11と複雑なEigenの型はこれを尊重しない(生涯は延長されているにも関わらず、返された一時的なデータを削除する)。したがって、合法的かもしれないが、それには本当に正当な理由がない限り、それは疑わしいものとしてフラグを立てるべきである。

また、指定されたC++ 11は、値で返された場合には呼び出しサイトで一時的に割り当てる必要があります。その有用性は、最新の標準を使用している場合よりも少なくなります。