函数体中的命名空间前缀

时间:2016-03-24 13:54:25

标签: c++ namespaces

我刚刚经历了一个案例,我不需要在名称空间中声明的函数中为名称空间添加前缀

考虑一下:

namespace fs
{
    void ftest();
    typedef int uint;
}

void fs::ftest()
{
    uint p = 2; // no prefix fs:: needed
}

这实际上并没有让我感到震惊,但我想有一些见解:为什么实际上有效?显然这不是koenig查找。

我正在使用VS 2013

1 个答案:

答案 0 :(得分:3)

这是基本的非限定查询。相关规则位于[basic.lookup.unqual]

  

在函数的 declarator-id 之后的函数定义中使用的名称,该函数是名称空间N的成员(其中,仅出于展示的目的,{{1}应声明全局范围)   在用于使用它的块中或在其封闭块(6.3)中使用之前,应在用于命名空间N 之前声明,或者如果{{1}是一个嵌套的命名空间,应该在N之一中使用之前声明   封闭命名空间。 [例如:

N
     

-end example]