首页 >后端开发 >C++ >为什么基于范围的 for 循环在传递给 C 中非主函数的数组上使用时会失败?

为什么基于范围的 for 循环在传递给 C 中非主函数的数组上使用时会失败?

Linda Hamilton
Linda Hamilton原创
2024-10-25 02:15:291079浏览

Why does a range-based for-loop fail when used on an array passed to a non-main function in C  ?

数组上基于范围的 For 循环传递给非主函数

问题:

在 C 项目中,尝试在传递给非主函数的数组上使用基于范围的 for 循环无法编译。当尝试访问非主函数中基于范围的 for 循环时,代码会抛出错误,导致无法找到 begin(int*&) 的匹配函数调用。

答案:

当您将数组传递给非主函数时,数组会衰减为指针,从而丢失有关其大小的关键信息。要在非主函数中启用基于范围的 for 循环:

  1. 使用数组引用: 通过引用而不是指针传递数组。这保留了大小信息:

    <code class="cpp">void foo(int (&&bar)[3]);</code>
  2. 通用方法: 使用带有指定数组大小的模板参数的函数模板。这种方法允许传递不同的数组大小:

    <code class="cpp">template <std::size_t array_size>
    void foo(int (&&bar)[array_size]);</code>

通过保留大小信息,基于范围的 for 循环可以在非范围内正确地迭代数组元素。主要功能。

以上是为什么基于范围的 for 循环在传递给 C 中非主函数的数组上使用时会失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

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