行我有事件序列:在返回之前是否會破壞參數?
- 我構造的r值對象
- 我通過一個迭代到r值對象到一個函數作爲參數
- 功能在此操作迭代器
- 該函數返回該迭代器值
- 我取迭代
我不知道是什麼原因導致了r值對象的清理,是否終止了該行?
好了,現在具體情況,我試圖想出了這個問題一個更好的答案: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上工作正常:但我可能會得到未定義的行爲。這是由以下事實:Visual Studio中的代碼段錯誤2015
不是[this](http://stackoverflow.com/questions/2506793/c-life-span-of-temporary-arguments)回答這個關於一生的問題嗎? – NathanOliver
@NathanOliver它的確如此說:「通常這意味着它結束於';'(或')''''''''if','while','switch'等)表示語句結束。在你的例子中,這是函數調用的結束。「我認爲'''是我的問題的答案。但是,聲明中的「通常」並不是確定性的。如果清理應該推遲到''''那麼我是金,但這將意味着微軟做錯了...... –
我不知道這段代碼是否調用UB,但是對它的任何更好的答案不。 –