首页 > 解决方案 > 如何传递数组代替指向函数的指针

问题描述

我有以下函数 myfunc ,它将 std::span 作为变量。

const foo*  foos     = nullptr;
uint32_t    fooNum = 0;

std::span<const foo> fooSpan = std::span<const foo>(foos, fooNum);

myfunc(fooSpan)

现在我有另一组数组形式的变量

const foo fooArray[];
uint32_t  numfoo = 0;

这是用这些变量调用 myfunc() 的正确方法吗

std::span<const foo> fooSpan = std::span<const foo>(foosArray, numfoo);
myfunc(fooArray)

标签: htmlc++arrayspointers

解决方案


如果myfunc得到原型

void myfunc (std::span<const foo>);

那么myfunc(fooArray)只有当fooArray是数组const foo并且有初始化程序可用或者是一个时才合法std::array,即可以推断出它的大小以考虑span将使用哪个构造函数,例如

using foo = int;
const foo arrFunc[] = {3,4,5};
std::array<const foo,3> arrFunc2{3,4,5};

void myFunc(std::span<const foo>) {}

int main()
{
    myFunc(arrFunc);
    myFunc(arrFunc2);
}

使用类似的东西myFunc({arrFunc,numfoo});也是可能的,那就是span在适当的位置创建一个,在这种情况下arrFunc可以是一个指针。


推荐阅读