在课堂上定义的朋友功能的范围?

时间:2014-02-06 16:50:08

标签: c++

前几天我问了一个关于类内定义的朋友函数(Which scope does an in-class-defined friend function belong to?)范围的问题,我知道该函数在封闭命名空间的范围内但不会可以搜索,直到在类外部显式声明(ADL是一个例外)。

今天我在C ++标准(第11.3节)中找到了一些相关的陈述:

  

当且仅当该类是非本地类(9.8),函数名称是非限定的,并且该函数具有命名空间作用域时,才能在类的友元声明中定义函数。 [例如:

class M {  
    friend void f() { } // definition of global f, a friend of M,  
                        // not the definition of a member function  
};  
—end example ]
     

这样的功能是隐含的inline。在类中定义的友元函数位于定义它的类的(词法)范围内。在课外定义的朋友函数不是(3.4.1)。

我们可以看到这里有两个与范围相关的语句:“具有命名空间范围”“位于定义它的类的(词法)范围内”< / strong>即可。我在这里很困惑。如果前者与我之前的问题(Which scope does an in-class-defined friend function belong to?)有关,那么后者代表什么?

1 个答案:

答案 0 :(得分:1)

“命名空间范围函数”是一个函数,它是命名空间的成员(即“范围”在这里表示函数的“主范围”)。

后面的语句链接到3.4.1,必须说

  

在授予友谊的类中内联定义的友元函数(11.3)定义中使用的名称的名称查找应按照成员函数定义中的查找进行。