问题描述
这样做正确吗?
void f();
namespace ns
{
class C
{
int m;
friend void ::f();
};
}
void f()
{
ns::C c;
c.m = 2;
}
?
该代码已在VS中成功编译。但是我找不到有关在标准中为朋友声明限定名称空间的任何信息。合法吗?有人可以提供标准的链接或报价吗?
解决方法
是的,合法的。
namespace
仅仅是为函数,类等添加另一层描述的方法。
即使friend
与该函数位于不同的class
中,也可以在class
内将任何函数标记为namespace
。该函数也可以位于namespace
中。
标准中没有关于此的特定部分,但这是标准的必然结果。此参考是一个起点:https://en.cppreference.com/w/cpp/language/namespace