チャットで次の例が表示されました。
#include <iostream>
struct foo { ~foo() { std::cout << "destroying!\n"; } };
const foo& func(const foo& a, const foo&) { return a; }
int main()
{
foo x;
const foo& y = func(foo(), x);
std::cout << "main\n";
}
出力:
destroying!
main
destroying!
一時的なものの存続期間は、そのスコープ内のref-to-にバインドされていても、foo
全体に拡張されていないことを示しているようです。main
const
したがって、おそらく、ライフタイム延長は「1回だけ機能」します。つまり、func
の引数が初期化されるときに適用されますが、連続するバインディングを介して渡されることはありません。
私の解釈は正しいですか?もしそうなら(そして個々の段落が直接適用できる場合)、この振る舞いを定義する標準的な言い回しは何ですか?