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

Pho*_*non 18 c++ c++11

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

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

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

Bar*_*rry 14

它是这样的简写:

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

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

  • @Phonon:它是一种标准语法,因为古代C. C没有引用,但是数组指针类型从时间开始就被描述为`T(*)[N]`.除了这一点之外,用`&`替换`*`. (4认同)
  • 在语法上,这是一个*abstract-declarator*. (3认同)

use*_*093 5

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

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

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

template <typename T, size_t N>
constexpr size_t size_of(T[N]) {
    return N;
}
Run Code Online (Sandbox Code Playgroud)

如果给数组一个名称,它看起来像:

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