首页 >后端开发 >C++ >大小未知的 std::array 可以直接传递给函数吗?

大小未知的 std::array 可以直接传递给函数吗?

Susan Sarandon
Susan Sarandon原创
2024-10-25 04:44:29383浏览

Can std::array with Unknown Size be Passed to a Function Directly?

将未知大小的 std::array 传递给函数

在此代码示例中,目标是创建一个函数,该函数接受以下类型的 std::array已知类型但大小未知。这是各种编程任务中都可能出现的常见场景。

<code class="cpp">// made up example
void mulArray(std::array<int, ?>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}

// lets imagine these being full of numbers
std::array<int, 17> arr1;
std::array<int, 6>  arr2;
std::array<int, 95> arr3;

mulArray(arr1, 3);
mulArray(arr2, 5);
mulArray(arr3, 2);</code>

但是,在开发人员寻找解决方案的过程中,他们遇到了使用函数模板的建议。虽然函数模板可以解决这个问题,但它们可能会带来额外的复杂性,并且并不总是最有效的方法。

提出的问题是是否有一种更简单的方法来完成此任务,类似于如何使用纯 C 风格数组。不幸的是,答案是否定的。在 C 中,没有直接的方法可以在不使用函数模板的情况下将未知大小的数组传递给函数。

为了实现这一点,我们确实必须求助于函数模板,如下所示:

<code class="cpp">template<std::size_t SIZE>
void mulArray(std::array<int, SIZE>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}</code>

此函数模板可以与任何大小的数组一起使用,如以下实例所示:https://godbolt.org/z/sV49sK

以上是大小未知的 std::array 可以直接传递给函数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn