当调用该函数时,它清楚如何执行名称查找和重载解析。但是当没有调用函数时会发生什么?例如。
#include <iostream>
using std::cout;
using std::endl;
void foo(int){ cout << "foo(int)" << endl; }
void foo(int, int){ cout << "foo(int, int)" << endl; }
void (*baz)(int, int);
int main()
{
baz = foo; //1
baz(1, 1);
}
在这种情况下,我们有两个名为foo
的函数,正式地,非限定名称查找它们。标准第13条并未涵盖该案例,因为它仅涉及函数调用上下文N3797:13.3/2 [over.match]
:
重载分辨率选择七个不同的调用函数 语言中的上下文:
答案 0 :(得分:2)
在这种情况下的行为受C ++ 11标准中的这种措辞的支配(N3797中有类似的部分):
使用不带参数的重载函数名称会在某些上下文中解析为函数,指向函数的指针或指向过载集中特定函数的成员函数的指针。 ... 选择的功能 是一个类型与上下文中所需的目标类型的函数类型相同的那个。 - ISO / IEC 14882:2011(E)§13.4[over.over](强调我的)
这里没有使用标准的重载决策规则,因为你要分配一个函数指针类型,所以编译器只需选择与函数指针类型完全匹配的函数重载。