【发布时间】:2019-04-20 20:06:59
【问题描述】:
我想知道是否可以通过引用将数组或 std::array 传递给函数,而无需在函数声明中明确说明数组的大小,这就是这种方式 void Foo(std::array& arr)。
const int n = 4;
std::array<int, n> arr;
Foo(arr, n);
void Foo( std::array<int, n>& arr);
【问题讨论】:
标签: c++
我想知道是否可以通过引用将数组或 std::array 传递给函数,而无需在函数声明中明确说明数组的大小,这就是这种方式 void Foo(std::array& arr)。
const int n = 4;
std::array<int, n> arr;
Foo(arr, n);
void Foo( std::array<int, n>& arr);
【问题讨论】:
标签: c++
你不能这样做,因为不同大小的std::arrays 是不同的类型。
根据 aparpara 的回答将其设为函数模板,或将其设为接受范围作为一对迭代器的函数模板。后一个选项将使其独立于容器类型和元素类型。这也符合标准库的做法:
template <typename Iterator>
void Foo(Iterator first, Iterator last)
{ /* ... */ }
【讨论】:
唯一的办法就是制作函数模板:
template <typename T, int N>
void Foo(std::array<T, N>& arr)
{
...
}
【讨论】:
std::array<int, 4> 例如在这种情况下,函数将被限制为该特定类型。大小由编译器自动推断,这是完全不同的事情。此外,这将与问题中提供的代码完美配合。