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

What does (&) -- ampersand in parentheses -- mean in this code?

本文关键字:代码 是什么 意思      更新时间:2023-10-16

在这个答案中,给出了以下代码(C++11):

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 (&anonymous_variable)[N]) {
    return N;
}

在函数中,您实际上不需要变量的名称,只需要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[N]) {
    return N;
}

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

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