在返回之前是否销毁参数



好的,我有这样的事件序列:

  1. 我构造一个 r 值对象
  2. 我将该 r 值对象的迭代器作为参数传递到函数中
  3. 该函数在此迭代器上运行
  4. 该函数按值返回此迭代器
  5. 我取消引用迭代器

我不知道是什么原因导致清理r值对象,是那行的终止吗?

好的,现在具体来说,我试图为这个问题想出一个更好的答案:字符串乘法 C++ 我有代码:

const auto bar = 13U;
const char multiplicand[] = "0, ";
const auto length = strlen(multiplicand);
const string foo(&*generate_n(string(bar * length, '').begin(), bar * length, [&]() {
    static auto i = 0U;
    return multiplicand[i++ % length];
}) - bar * length);

所以我想知道什么时候应该摧毁generate_n内部建造的string顺便说一句,这似乎在 gcc 5.1 上工作正常: http://ideone.com/Y8rDs5 但我可能只是得到未定义的行为。Visual Studio 2015上的代码段错误这一事实暗示了这一点。

临时表达式(如 string(bar * length, ''))在完整表达式结束时被销毁。完整的表达式是 const string foo 的初始值设定项。因此,在 foo 的 ctor 返回之前,不会销毁临时字符串。

最新更新