【发布时间】:2021-01-09 12:48:26
【问题描述】:
在 C++ 中,对数组的引用类型显示为 int (&) [10]。例如,当我尝试使用 g++ 编译并发出以下代码时
template <typename T> void foo(T&);
int main() {
int a[] {1, 2, 3};
foo(a);
}
我收到以下错误:
undefined reference to `void foo<int [3]>(int (&) [3])'
在这个错误文本中,为什么参数类型显示为int (&) [3]?为什么我们不将数组引用类型表示为对整数类型或类类型的引用,即int [10] &?使用(&)的原因是什么?
我知道我们可以像这样定义一个“对数组的引用”变量:
int (&b)[3] = a;
而且这个定义确实“看起来像”b 的类型。但这是唯一的原因吗?符号int [10] &有问题吗?
【问题讨论】:
-
@bloody 没有定义。我不是故意写定义,将参数 T& 的类型视为错误。此方法来自 Scott Meyers 的《Effective Modern C++》一书。
-
但是
T&类型不是错误吗?您的问题仅仅是为什么语法不是(例如)void bar(int[10] &array)? -
如果您将函数定义为
= delete;,您可以节省一些构建时间。不必等待链接器。 -
@Someprogrammerdude 我只是想知道符号的原因,即为什么类型显示为
int (&) [3]而不是int [3] &。 -
可能是因为它的语法不正确。如果编译器显示包含无效语法的错误消息,那就太糟糕了。