首頁  >  文章  >  後端開發  >  為什麼基於範圍的 for 迴圈在傳遞給 C 中非主函數的陣列上使用時會失敗?

為什麼基於範圍的 for 迴圈在傳遞給 C 中非主函數的陣列上使用時會失敗?

Linda Hamilton
Linda Hamilton原創
2024-10-25 02:15:29986瀏覽

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