gpt4 book ai didi

c++ - 将 std::vector 传递给数组引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:05 26 4
gpt4 key购买 nike

我在尝试将一些老式 C++ 代码与更现代的数据结构连接起来时遇到了问题。 不幸的是,我无法更改旧代码的界面,所以我只能使用编写的函数

特别是,有一个函数将以下内容作为参数:

int doStuff(FooObj* (&foo_array), int n_elements) {
// do stuff with array member 0
FooObj* foo = &(foo_array[0])
...
}

基本上,这个函数在遗留代码中的使用方式是在堆上创建一个指向 FooObj 数组的指针,然后传递给该函数:

FooObj* foos;
foos = new FooObj[100];
doStuff(foos, 100);
delete [] foos;

我想做的是传入一个 FooObj vector (因为内容的大小会动态调整),但我无法理解指针/引用语义。如果我尝试以下操作:

std::vector<FooObj> foos;
foos.resize(100);
doStuff(&foos[0], 100);

我收到错误:从类型为“FooObj*”的临时类型中对类型为“FooObj*&”的非常量引用的初始化无效

是否可以传递这样的 vector ?

最佳答案

这与堆与栈无关。一个近似的经验法则:当传递一个声明为引用的参数时,您必须传递一个左值。所以:

std::vector<FooObj> foos;
foos.resize(100);

FooObj *p=&foos[0];

doStuff(p, 100);

您遇到编译器错误的原因是因为表达式“&foos[0]”是一个右值,您必须在此处添加一个左值。所以:将其设为左值。

关于c++ - 将 std::vector 传递给数组引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26920916/

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