質問: foo(5); ``` 一時参照はxに代入されるまで「生き残る」か? (私はそれがfoo()呼び出しの期間存続することを知っていますが、割り当てによって私は躊躇します) The code に question has some legitimate uses for relyにg on const references here, i.e. I would need two separate functions ``` T const & foo_cr(T const & dflt); T const & foo_v(T dflt); ``` which I want to avoid (just relyにg on different signatures wiht the same name seems a bit risky to me.)
回答: > 一時参照がxに割り当てられるまで、参照は「生き残る」か? > > 一般的には、はい。 `foo` が `dflt` を返した場合、その参照(一時的な5への参照)は、フル・エクスプレッションが作成されるまで、つまり初期化後まで有効です。 C ++ 03、12.2/3: > 実装がクラスの一時オブジェクトを導入するとき > 非自明のコンストラクタ(12.1)を持つ場合、それは > 一時オブジェクトに対してコンストラクタが呼び出されます。同様に、 > デストラクタは一時的に呼び出されなければならない > デストラクタ(12.4)。一時的なオブジェクトは、最後のステップとして破棄されます。 > 完全表現(1.9)を評価する(字句的に) > それらが作成されたポイント。これは、その評価 > 例外をスローすることで終了します。 > > 詳細は12.2/4と12.2/5、特にこのルールの例外を参照してください。 あなたが残した `...` を返すときに何が起こるかわかりませんが、これについて質問していないと思います。