根据C++标准: -
名称查找规则统一适用于所有名称(包括typedef-names(7.1.3),名称空间名称(7.3),概念名称(14.9),概念映射名称(14.9.2)和类名称( 9.1))语法允许在特定规则讨论的上下文中的这些名称.
名称查找规则适用于Overload解决方案发生之前?
我不明白背后必然有一些原因.
以下示例来自Book C++ in Nutshell: -
void func(int i)
{
std::cout << "int: " << i << '\n';
}
namespace N
{
void func(double d)
{
std::cout << "double: " << std::showpoint << d << '\n';
}
void call_func( )
{
// Even though func(int) is a better match, the compiler finds
// N::func(double) first.
func(3);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在命名空间N中工作,
我只是写了一个函数,func()然后我编写了一些代码来调用这个新函数.在使用我刚刚编写的函数之前,从另一个命名空间中选择一个函数似乎是违反直觉的.
(即它使用重载决议)
我写了一个函数bob(double).它完美地工作,因为与全局命名空间中的`bob(double)没有冲突.我编写代码,应用程序运行完美.
一年后,有人bob(int)在全局命名空间中编写函数并重新编译应用程序.突然间我的代码没有变化.我的所有调用bob(5)都被重定向到bob(int)全局命名空间.
这是应用程序工作的非常不希望的方式.