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)
有一个实际的原因。首先,内联友元定义无法通过限定或非限定查找找到。它只能通过 ADL 找到。因此,如果我们从您的示例中获取该类,请将其放在全局范围内并尝试调用Bar:
class Foo
{
friend void Bar(){};
void foo() {
Bar();
}
};
Run Code Online (Sandbox Code Playgroud)
我们将收到Bar未在该范围内声明的通知。所以如果它是在一个本地类。你不能从成员那里调用它。你不能在函数内部调用它。您可以称呼它的唯一方法涉及一些篮球或 ADL。所以语言不允许这样做。它不被视为有用的功能。
| 归档时间: |
|
| 查看次数: |
1355 次 |
| 最近记录: |