2011-02-17 82 views
3

可能重复:
Can someone explain this template code that gives me the size of an array?在问候数组的大小计算

嗨,我期待在这里张贴的答案:

Computing length of array

复制在这里:

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

有人可以解释我的意义吗(&)?

+0

这是一个不同的问题。 – 2011-02-17 19:38:59

+1

@RobertHarvey:不,他们是一样的,但措辞不同。这个具体地叫出&,而另一个则询问维度,但维度由于参考而具有*完全的意义。注意:“当我通过数组时,会发生什么?”(另一方面)直接由“'的含义(从这里开始)表示它通过引用传递”。 – 2011-02-17 19:42:04

回答

7

&表示该数组通过引用传递。这可以防止类型腐朽为指针。没有通过引用传递你会得到衰减,并没有关于数组大小的信息。

非模板示例:

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

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

    foo(x);   // ok 
    //foo(y);   // !incompatible type 
} 

干杯& HTH,

2

的&意味着该阵列是通过引用来传递。数组无法通过值传递,因为在这种情况下,它们衰减为指向第一项的指针。如果发生这种情况,与数组类型关联的大小信息将丢失。

它在括号中,否则就意味着该函数接受一个指向引用的指针。尽管这样的事情在C++中不合法,但其语法与您声明指向数组的指针是一致的。

​​3210