在C++中,如果我有

namespace myNamespace {
    boost::whatever();
}

编译器会在boost命名空间还是myNamespace::boost中寻找what()?

最佳答案

问题不是关于它是否会寻找boost::whatever,而是它会在哪里找到boost本身。
如果您具有名称为boost的嵌套 namespace 定义,它将在声明时隐藏全局boost namespace 。全局boost命名空间将一直可见,直到声明myNamespace::boost(第3.3.2 / 2节)为止。

因此,如果在创建嵌套名称boost::whatever()之前调用myNamespace::boost,它将查找全局boost命名空间。如果您始终希望它在全局 namespace 中找到::boost,则可以使用boost来限定名称。

07-24 14:08