可能重复:
Can someone explain this template code that gives me the size of an array?在问候数组的大小计算
嗨,我期待在这里张贴的答案:
复制在这里:
template <typename T, std::size_t N>
std::size_t size(T (&)[N])
{
return N;
}
有人可以解释我的意义吗(&)?
可能重复:
Can someone explain this template code that gives me the size of an array?在问候数组的大小计算
嗨,我期待在这里张贴的答案:
复制在这里:
template <typename T, std::size_t N>
std::size_t size(T (&)[N])
{
return N;
}
有人可以解释我的意义吗(&)?
&
表示该数组通过引用传递。这可以防止类型腐朽为指针。没有通过引用传递你会得到衰减,并没有关于数组大小的信息。
非模板示例:
void foo(int (&a)[5])
{
// whatever
}
int main()
{
int x[5];
int y[6];
foo(x); // ok
//foo(y); // !incompatible type
}
干杯& HTH,
的&意味着该阵列是通过引用来传递。数组无法通过值传递,因为在这种情况下,它们衰减为指向第一项的指针。如果发生这种情况,与数组类型关联的大小信息将丢失。
它在括号中,否则就意味着该函数接受一个指向引用的指针。尽管这样的事情在C++中不合法,但其语法与您声明指向数组的指针是一致的。
3210
这是一个不同的问题。 – 2011-02-17 19:38:59
@RobertHarvey:不,他们是一样的,但措辞不同。这个具体地叫出&,而另一个则询问维度,但维度由于参考而具有*完全的意义。注意:“当我通过数组时,会发生什么?”(另一方面)直接由“'的含义(从这里开始)表示它通过引用传递”。 – 2011-02-17 19:42:04