【发布时间】:2022-01-20 14:45:14
【问题描述】:
引用数组的函数有什么区别:
// reference to array
void f_(char (&t)[5]) {
auto t2 = t;
}
简单的数组:
// just array
void f__(char t[5]) {
auto t2 = t;
}
作为参数?
调用代码是:
char cArray[] = "TEST";
f_(cArray);
f__(cArray);
char (&rcArr)[5] = cArray;
f_(rcArr);
f__(rcArr);
在这两种情况下 t2 都是 char*,但在第一个函数中,我的 VS2019 显示 t 内部函数的类型为 char (&t)[] 和 t 在第二个函数中的类型为 char*。
那么毕竟,这些功能之间有什么实际区别吗?
【问题讨论】:
-
尝试将数组作为参数传递给您的两个函数,并看到第一个失败。 (第二个实际上是一个指针,而不是一个数组。)
-
我编辑了这个问题。函数采用精确大小的数组。
-
第二个还是带指针;当没有参考时,忽略大小。
-
第二个实际上并不采用精确大小的数组。它需要一个指针。试试看!
-
这并没有解决问题,但是包含两个连续下划线 (
f__) 的名称和以下划线后跟大写字母的名称保留供实现使用。不要在你的代码中使用它们。
标签: c++ c++11 pass-by-reference implicit-conversion