MST

星途 面试题库

面试题:C++ sizeof运算符在模板元编程中的深度应用

编写一个C++模板元编程代码,利用sizeof运算符和递归模板特化,计算编译期数组的元素个数。要求代码具有通用性,能处理不同类型的数组。
49.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

// 主模板,用于计算数组元素个数
template<typename T, size_t N>
struct ArraySize {
    static const size_t value = sizeof(T[N]) / sizeof(T);
};

// 递归模板特化,用于处理嵌套数组
template<typename T, size_t N1, size_t N2>
struct ArraySize<T[N1][N2]> {
    static const size_t value = ArraySize<T[N2]>::value * N1;
};

int main() {
    int arr1[5];
    std::cout << "arr1的元素个数: " << ArraySize<decltype(arr1), 5>::value << std::endl;

    int arr2[3][4];
    std::cout << "arr2的元素个数: " << ArraySize<decltype(arr2), 3>::value << std::endl;

    return 0;
}
  1. 主模板 ArraySize
    • 它接受数组的元素类型 T 和数组维度 N
    • 通过 sizeof(T[N]) / sizeof(T) 计算数组元素个数。
  2. 递归模板特化 ArraySize<T[N1][N2]>
    • 处理二维数组,通过递归调用 ArraySize<T[N2]> 并乘以第一维的大小 N1 来计算总元素个数。
  3. main 函数
    • 定义了一个一维数组 arr1 和一个二维数组 arr2
    • 使用 ArraySize 模板计算并输出它们的元素个数。