我正在尝试使以下代码正常工作
auto createMyArray = []() {
float foo[] = {0.0f, 1.5f, 2.0f};
return foo;
};
auto myArray = createMyArray();
std::vector<float> myVector;
// fatal error: no matching function for call to 'begin'
myVector.insert(myVector.end(), std::begin(myArray), std::end(myArray));
问题是createMyArray返回一个指向数组的指针,我不确定尝试取消引用它是否是一个好主意。
我也收到以下警告
warning: address of stack memory associated with local variable 'foo' returned [-Wreturn-stack-address]
return foo;
这是有道理的,因为我不想使用new来创建数组,因为我想避免堆分配。
处理此类数组的现代C ++方法是使用std::array
。那应该避免您面临的问题。
像这样使用本机C数组会使您陷入与分配有关的问题,应避免这些问题。您所看到的编译器警告不要掉以轻心(就像任何警告一样)。它告诉您foo
指向的内存超出了您的lambda范围。myVector
调用之后您创建的对象很可能会覆盖它,createMyArray()
并且对foo
元素的任何进一步引用都可能给您带来垃圾。
除此之外,请参见以下有用的答案:如何在不循环的情况下将数组的内容复制到C ++中的std :: vector?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句