括号中的(&) - &符号 - 在此代码中是什么意思?

时间:2015-06-13 17:50:23

标签: c++ c++11

this answer中,给出了以下代码(C ++ 11):

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

(&)在这种情况下意味着什么?这种事情非常难以搜索。

2 个答案:

答案 0 :(得分:13)

这是这样的简写:

template <typename T, size_t N>
constexpr size_t size_of(T (&anonymous_variable)[N]) {
    return N;
}

在函数中,您实际上并不需要变量的名称,只需要N上的模板推导 - 所以我们可以简单地选择省略它。括号在语法上是必需的,以便通过引用传递数组 - 您不能按值传入数组。

答案 1 :(得分:4)

这是通过引用将数组作为参数传递:

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

因为你无法传递这样的数组:

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

如果为数组指定了名称,它将如下所示:

template <typename T, size_t N>
constexpr size_t size_of(T (&arrayname)[N]) {
    return N;
}