关于阵列大小计算

Kir*_*ran 3 c++

可能重复:
有人可以解释这个模板代码,它给出了数组的大小吗?

嗨,我正在看这里发布的答案:

计算阵列的长度

复制到这里:

template <typename T, std::size_t N>
std::size_t size(T (&)[N])
{
    return N;
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下(&)的重要性吗?

Che*_*Alf 7

&说,该阵列被通过引用传递.这可以防止类型衰减到指针.如果不通过引用传递,您将获得该衰减,并且没有关于数组大小的信息.

非模板示例:

void foo( int (&a)[5] )
{
    // whatever
}

int main()
{
    int x[5];
    int y[6];

    foo( x );           // ok
    //foo( y );         // !incompatible type
}
Run Code Online (Sandbox Code Playgroud)

干杯&hth.,