我可以使用模板函数来捕获一个数组以及其(编译时)大小,就像这样:
template<int N>
void foo(const int (&)[N]) {
std::cout << "foo(const int (&)[N])\n";
}
然而,我希望重载foo
函数也可以接受指向常量的指针,这样第一个重载将在调用数组类型的函数时使用,第二个重载将在直接调用指针时使用。
void foo(const int *) {
std::cout << "foo(const int *)\n";
}
int main() {
int a[1] = { 0 };
foo(a);
const int b[1] = { 0 };
foo(b);
}
这里,对于a
,调用了第一个重载函数,而对于b
,调用了第二个重载函数。
我猜测对于a
,编译器必须执行一次const转换,这意味着foo(const int *)
不是完美匹配,但我不知道为什么这不是一个模棱两可的函数调用。
我该如何修改代码才能让两种情况都调用第一个重载函数?
std::array
中:p - melak47