完全符合

对于参数类型不需要转换的重载,或者仅在仍被视为完全匹配的类型之间所需的转换优先于需要其他转换才能调用的重载。

void f(int x);
void f(double x);
f(42); // calls f(int)

当参数绑定到对同一类型的引用时,即使引用更符合 cv,匹配也被视为不需要转换。

void f(int& x);
void f(double x);
int x = 42;
f(x); // argument type is int; exact match with int&

void g(const int& x);
void g(int x);
g(x); // ambiguous; both overloads give exact match

出于重载分辨的目的,类型“T 的数组”被认为与“指向 T 的指针”类型完全匹配,并且函数类型 T 被认为与函数指针类型 T*完全匹配,即使两者都需要转换。

void f(int* p);
void f(void* p);

void g(int* p);
void g(int (&p)[100]);

int a[100];
f(a); // calls f(int*); exact match with array-to-pointer conversion
g(a); // ambiguous; both overloads give exact match