首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 數組引用作為函數參數:避免退化為指針的模板技巧

     編輯:C++ 入門

核心代碼

template <std::size_t N>
void f(char (&arr)[N]) {
    std::cout << sizeof(arr) << '\n'; // 輸出數組總字節數,而非指針大小
}

原理解析

  • 參數類型為 char (&)[N] —— 數組引用,保留數組長度信息;
  • 調用時 N 自動推導為數組元素個數;
  • sizeof(arr) 返回完整數組大小(N * sizeof(char)),證明未退化為指針;
  • 依據 C++11 標準 [dcl.fct] 8.3.5/5:數組引用參數不發生退化。

應用場景

  1. 需在函數內獲取數組長度的通用算法;
  2. 編譯期靜態斷言數組大小;
  3. 避免傳遞指針+長度的雙參數模式,減少錯誤。

注意事項

  • 僅適用於定長數組,動態分配記憶體(new T[n])無法使用;
  • 模板會為每個不同長度實例化代碼,可能增加二進制體積;
  • C++20 可用 std::span 替代,提供更靈活的非擁有視圖。

相關編譯錯誤 Q&A

undefined reference to `main`
編譯生成可執行文件時缺少 main 函數。若僅編譯目標文件,去掉 -o 選項改用 -c。
undefined reference to `ClassName::Function()`
成員函數聲明未定義,或定義未加入編譯單元。檢查:const 成員函數不能修改數據;專案依賴關係正確;重新建立專案清理緩存。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved