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

C++ 模板技巧:編譯期自動推導陣列長度

     編輯:關於C++

問題背景

在 C/C++ 中,將陣列傳遞給函式時,實際傳遞的是首元素位址(指標),函式內部無法直接得知陣列長度。傳統做法是額外增加一個參數傳遞長度,但這容易出錯且不夠優雅。

模板解決方案

利用 C++ 模板的非型別參數,可在編譯期自動推導陣列大小:

#include <iostream>
using namespace std;

template <class T, int N>
void array(T (&param)[N]) {
    cout << "N = " << N << endl;
}

int main() {
    int i[100];
    double d[20];
    char c[6];
    array(i); // 輸出 N = 100
    array(d); // 輸出 N = 20
    array(c); // 輸出 N = 6
    return 0;
}

原理解析

  • 函式參數 T (&param)[N] 是一個「陣列參考」,N 為陣列長度的非型別模板參數。
  • 編譯器根據實際傳入的陣列類型自動推導 T 與 N,無需手動指定。
  • 此技巧僅適用於固定大小的靜態陣列,不適用於動態分配的指標。

應用場景

常用於需要知道容器大小的通用演算法、序列化函式、靜態斷言等場景,避免魔術數字,提升型別安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved