OK、次の一連のイベントがあります。
- r値オブジェクトを構築します
- そのr値オブジェクトへのイテレータをパラメータとして関数に渡します
- 関数はこの反復子で動作します
- 関数はこの反復子を値で返します
- イテレータを逆参照します
r値オブジェクトのクリーンアップの原因がわかりません。その行の終了ですか?
OK、具体的には、この質問に対するより良い答えを見つけようとしています: string Multiplication in C++そして、私はコードを持っています:
const auto bar = 13U;
const char multiplicand[] = "0, ";
const auto length = strlen(multiplicand);
const string foo(&*generate_n(string(bar * length, '\0').begin(), bar * length, [&]() {
static auto i = 0U;
return multiplicand[i++ % length];
}) - bar * length);
string
そのため、内部で構築された がいつgenerate_n
破棄されるべきかを知りたいです。ちなみに、これは gcc 5.1 で問題なく動作するようです: http://ideone.com/Y8rDs5しかし、未定義の動作が発生する可能性があります。これは、コードが Visual Studio 2015 でセグメンテーション違反を起こすという事実によって暗示されています。