提问人:Le_Square 提问时间:11/7/2023 最后编辑:Le_Square 更新时间:11/7/2023 访问量:67
将数组(非向量)传递给函数 [duplicate]
passing array (not vector) to function [duplicate]
问:
我想这样做
void DoSomething (int arr[])
{
// do something
}
但不是它arr[]
std::array
void DoSomething (std::array <int> arr) // <--- incorrect way to declare an array
{
// do something
}
使用而不是工作,但我希望有一个解决方法,因为工作得很好。std::vector
std::array
std::array
arr[]
这也有效
const int arrSize;
void DoSomething (std::array <int,arrSize> arr)
{
// do something
}
但同样,我希望有一种方法可以在没有任何额外声明的情况下做到这一点。
答:
2赞
Remy Lebeau
11/7/2023
#1
std::array
是一个模板。如果你想接受任何大小的 a,你的函数也必须成为一个模板,例如:std::array
template <size_t N>
void DoSomething (std::array<int, N> arr)
{
// do something
}
然后,编译器可以根据您传入的任何内容为您推断。N
std::array
评论
3赞
Pepijn Kramer
11/7/2023
请考虑通过 (const) 引用传递数组,以避免复制数组(const) std::array<int,N>& arr
评论
void DoSomething (int arr[])
最终传递了一个指针并丢失了所有大小信息,因此 DoSomething 不知道要操作多少个元素。std::array
是必须指定的固定大小的数组。