【问题标题】:Passing array by reference without explicitly stating the size of the array in function declaration通过引用传递数组而不在函数声明中明确说明数组的大小
【发布时间】: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++


    【解决方案1】:

    你不能这样做,因为不同大小的std::arrays 是不同的类型。

    根据 aparpara 的回答将其设为函数模板,或将其设为接受范围作为一对迭代器的函数模板。后一个选项将使其独立于容器类型和元素类型。这也符合标准库的做法:

    template <typename Iterator>
    void Foo(Iterator first, Iterator last)
    { /* ... */ }
    

    【讨论】:

      【解决方案2】:

      唯一的办法就是制作函数模板:

      template <typename T, int N>
      void Foo(std::array<T, N>& arr)
      {
        ...
      }
      

      【讨论】:

      • 您提出的解决方案没有回答已回答的问题,即“我想知道是否可以通过引用将数组或 std::array 传递给函数,而无需明确说明函数声明中数组的大小 "
      • @eapetcho 大小不明确,因为您没有指定 std::array&lt;int, 4&gt; 例如在这种情况下,函数将被限制为该特定类型。大小由编译器自动推断,这是完全不同的事情。此外,这将与问题中提供的代码完美配合。
      猜你喜欢
      • 2017-09-01
      • 2020-11-08
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      相关资源
      最近更新 更多