3.4.1不合格的名称查找

Sud*_*rma 4 c++

根据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)

Mar*_*ork 9

如果我在命名空间N中工作,
我只是写了一个函数,func()然后我编写了一些代码来调用这个新函数.在使用我刚刚编写的函数之前,从另一个命名空间中选择一个函数似乎是违反直觉的.

现在考虑情况正好相反.

(即它使用重载决议)

我写了一个函数bob(double).它完美地工作,因为与全局命名空间中的`bob(double)没有冲突.我编写代码,应用程序运行完美.

一年后,有人bob(int)在全局命名空间中编写函数并重新编译应用程序.突然间我的代码没有变化.我的所有调用bob(5)都被重定向到bob(int)全局命名空间.

这是应用程序工作的非常不希望的方式.