在 C/C++ 中,將陣列傳遞給函式時,實際傳遞的是首元素位址(指標),函式內部無法直接得知陣列長度。傳統做法是額外增加一個參數傳遞長度,但這容易出錯且不夠優雅。
利用 C++ 模板的非型別參數,可在編譯期自動推導陣列大小:
#include <iostream>
using namespace std;
template <class T, int N>
void array(T (¶m)[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 (¶m)[N] 是一個「陣列參考」,N 為陣列長度的非型別模板參數。T 與 N,無需手動指定。常用於需要知道容器大小的通用演算法、序列化函式、靜態斷言等場景,避免魔術數字,提升型別安全。