C++ 括号中的符号(&;)在这段代码中是什么意思?

C++ 括号中的符号(&;)在这段代码中是什么意思?,c++,c++11,C++,C++11,在中,给出了以下代码(C++11): 模板 constexpr size_t size_of(t(&)[N]){ 返回N; } 在这个上下文中,(&)是什么意思?这类东西搜索起来异常困难。这是类似这样东西的简写: template <typename T, size_t N> constexpr size_t size_of(T (&anonymous_variable)[N]) { return N; } template <typename T, siz

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

模板
constexpr size_t size_of(t(&)[N]){
返回N;
}

在这个上下文中,
(&)
是什么意思?这类东西搜索起来异常困难。

这是类似这样东西的简写:

template <typename T, size_t N>
constexpr size_t size_of(T (&anonymous_variable)[N]) {
    return N;
}
template <typename T, size_t N>
constexpr size_t size_of(T[N]) {
    return N;
}
模板
constexpr size\u t size\u of(t(&匿名变量)[N]){
返回N;
}

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

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

template <typename T, size_t N>
constexpr size_t size_of(T (&)[N]) {
    return N;
}
模板
constexpr size_t size_of(t(&)[N]){
返回N;
}
由于无法传递这样的数组:

template <typename T, size_t N>
constexpr size_t size_of(T (&anonymous_variable)[N]) {
    return N;
}
template <typename T, size_t N>
constexpr size_t size_of(T[N]) {
    return N;
}
模板
constexpr size\u t size\u of(t[N]){
返回N;
}
如果为数组指定了一个名称,则该名称如下所示:

template <typename T, size_t N>
constexpr size_t size_of(T (&arrayname)[N]) {
    return N;
}
模板
constexpr size\u t size\u of(t(&arrayname)[N]){
返回N;
}

谢谢!这个模式有名字吗?@Phonon我不知道。@Phonon:这是一种标准语法,因为古代的C.C没有引用,但数组指针类型从时代开始就被描述为
T(*)[N]
。用
&
替换
*
不是重点。@AnT是的,这很有道理。谢谢你的澄清。从语法上来说,这是一个抽象声明符。为什么中间块是非法的?@声子数组不能通过引用传递;它们是按值传递的。