2025-07-14 C++数组引用传递:避免退化的底层原理与实战技巧 C++数组引用传递:避免退化的底层原理与实战技巧 一、为什么数组参数会退化?在C++中,当我们将原生数组作为函数参数传递时,会发生一个令人头疼的类型退化(Decay)现象:cpp void printSize(int arr[5]) { std::cout << sizeof(arr); // 输出指针大小而非数组大小 }这里的arr实际上退化为int*指针,丢失了数组长度信息。这种现象源于C++继承自C的语言特性——数组在大多数表达式中会自动转换为首元素指针。二、数组引用的本质解析数组引用是C++的语法糖,其本质是保留完整类型信息的复合类型。通过引用传递数组时,编译器会进行如下类型推导:cpp template<typename T, size_t N> void processArray(T (&arr)[N]) { // N会被自动推导为数组长度 static_assert(N > 0, "Array cannot be empty"); }这种写法通过模板参数捕获数组的完整类型信息,其中: - T表示元素类型 - N表示数组维度 - (&arr)[N]... 2025年07月14日 2 阅读 0 评论