编译时的数组大小

时间:2014-05-18 01:21:25

标签: c++ templates

我知道可以使用

确定C风格数组(在堆栈上分配)的大小
template <typename T, size_t N>
size_t arr_size(T(&)[N])
{
    return N;
}

这很好用。现在我的问题是为什么我们必须通过引用传递数组?如果我们按值传递,

template <typename T, size_t N>
size_t arr_size(T[N])
{
    return N;
}

代码无法编译,即在

#include <iostream>

template <typename T, size_t N>
size_t arr_size(T[N])
{
    return N;
}

int main()
{
    int arr[10];
    std::cout << "Array has size: " << arr_size(arr) << std::endl;
}
我们得到了 error: no matching function for call to 'arr_size' std::cout << "Array has size: " << arr_size(arr) << std::endl; ^~~~~~~~ /Users/vlad/minimal.cpp:6:8: note: candidate template ignored: couldn't infer template argument 'N' size_t arr_size(T[N])

如果我们定义

template <typename T, size_t N>
size_t arr_size(T(&)[N]) 

然后它有效。

0 个答案:

没有答案