【问题标题】:Lambda Expression pointer [duplicate]Lambda 表达式指针 [重复]
【发布时间】:2021-02-15 02:45:24
【问题描述】:

刚开始使用 lambda。我想创建指向数组的指针。我想我搜索了整个互联网和每个单独的教程,但我没有找到答案。

auto c = []() -> int* { int* b = new int[10]; b[0] = 2; b[1] = 2; return b; };
std::cout << sizeof(c()) << std::endl;
delete c();

即使 arrar 大小为 1000,sizeof(c) 始终返回 4。我的问题是你真的能做到吗?

【问题讨论】:

  • 在您的平台上,int* 的大小为 4 个字节。
  • 你用错了delete
  • 您正在泄漏第一个数组,因为您两次调用该数组,因此分配了 2 个数组。

标签: c++ function lambda


【解决方案1】:

即使 arrar 大小为 1000,sizeof(c) 始终返回 4。

如果在您的平台上,指针的大小为 4,则结果是预期且正确的。

[]() -> int* { int* b = new int[10]; b[0] = 2; b[1] = 2; return b; }

此 lambda 返回 int*

所以,sizeof 实际上返回的是 int* 类型的大小,而不是 int[10] 类型的大小。

【讨论】:

  • 这段代码没有发生数组衰减
猜你喜欢
  • 2015-03-31
  • 1970-01-01
  • 2018-01-03
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
相关资源
最近更新 更多