我们不能在本地类中定义友元函数是什么原因?

msc*_*msc 2 c++ friend local-class c++11

我有以下 C++ 片段代码。在main()函数内部声明一个类。

我们不能在本地类中定义友元函数是什么原因?

#include<iostream>

int main()
{
    class Foo
    {
        void foo() {} // Ok
        friend void Bar(){}; // Error
    };
}
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

有一个实际的原因。首先,内联友元定义无法通过限定或非限定查找找到。它只能通过 ADL 找到。因此,如果我们从您的示例中获取该类,请将其放在全局范围内并尝试调用Bar

class Foo
{
    friend void Bar(){};
    void foo() {
      Bar();
    }
};
Run Code Online (Sandbox Code Playgroud)

我们将收到Bar未在该范围内声明的通知。所以如果它是在一个本地类。你不能从成员那里调用它。你不能在函数内部调用它。您可以称呼它的唯一方法涉及一些篮球或 ADL。所以语言不允许这样做。它不被视为有用的功能。