【发布时间】:2021-11-19 03:18:30
【问题描述】:
考虑以下程序:
#include <iostream>
#include <cstring>
using namespace std;
void print(const char *pa) {
cout << "Print - using pointer" << endl;
}
void print(const char (&arr)[]) {
cout << "Print - using reference" << endl;
}
int main() {
char ca[] = {'B', 'A', 'D', 'C', '\0'};
print(ca);
}
Results:
Print - using reference
为什么引用优先于指针?
根据 C++ Primer 5th Ed.,第 6.6.1 节:
为了确定最佳匹配,编译器对 可用于将每个参数转换为其对应参数的类型的转换。转化排名如下:
- 完全匹配。在以下情况下发生完全匹配:
• 自变量和参数类型相同。
• 参数从数组或函数类型转换为相应的指针类型。 (第 6.7 节(第 247 页)涵盖了函数指针。)
• 在参数中添加或丢弃顶级常量。- 通过 const 转换进行匹配(第 4.11.2 节,第 162 页)。
- 通过促销进行匹配(第 4.11.1 节,第 160 页)。
- 通过算术匹配(第 4.11.1 节,第 159 页)或指针转换(第 4.11.2 节,第 161 页)。
- 通过类类型转换进行匹配。 (§ 14.9 (p. 579) 涵盖了这些转换。)
这里没有提及参考。有什么想法吗?
谢谢
【问题讨论】:
-
没有与参考的no转换。类型是相同的,您只是通过引用传递它。 ('&' 不是类型的一部分,那里。)因此:完全匹配。
标签: c++ arrays function c++11 overload-resolution