【问题标题】:The scope of in-class-defined friend function?类内定义友元函数的范围?
【发布时间】:2014-02-06 16:50:07
【问题描述】:

几天前我问了一个关于类内定义友元函数范围的问题(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)。

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

【问题讨论】:

  • AFAIK,它是关于朋友函数中的名称查找。 Live example

标签: c++


【解决方案1】:

“命名空间范围函数”是作为命名空间成员的函数(即,此处的“范围”是指函数的“主范围”)。

后面的语句链接到3.4.1,不得不说

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

【讨论】:

    猜你喜欢
    • 2012-01-02
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多