行我有事件序列:在返回之前是否会破坏参数?
- 我构造的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,但是对它的任何更好的答案不。 –