gpt4 book ai didi

c++ - 是否在返回之前销毁参数?

转载 作者:行者123 更新时间:2023-11-30 05:31:22 25 4
gpt4 key购买 nike

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

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

我不知道是什么导致了右值对象的清理,是那条线的终止吗?

好的,现在具体来说,我正在尝试为这个问题想出一个更好的答案: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);

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

最佳答案

诸如 string(bar * length, '\0') 之类的临时变量在 full 表达式的末尾被销毁。完整的表达式是 const string foo 的初始值设定项。因此,临时字符串不会在 foo 的构造函数返回之前被销毁。

关于c++ - 是否在返回之前销毁参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35580152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com