未在命名空间中声明和定义的命名空间 class 的朋友
Namespace's class's friend that is not declared and defined in the namespace
这样做对吗:
void f();
namespace ns
{
class C
{
int m;
friend void ::f();
};
}
void f()
{
ns::C c;
c.m = 2;
}
?
代码在VS中编译成功。但是我找不到任何有关在标准中为友元声明限定名称空间的信息。它甚至是合法的吗?有人可以提供 link 或标准中的引述吗?
是的,这是合法的。
A namespace
只不过是为函数添加另一层描述的一种方式,类, &c..
任何函数都可以标记为 class
中的 friend
,即使 class
与函数位于不同的 namespace
中。该函数也可以在 namespace
中。
标准中没有关于此的具体部分,但它是标准的必然结果。这个参考是一个起点:https://en.cppreference.com/w/cpp/language/namespace
这样做对吗:
void f();
namespace ns
{
class C
{
int m;
friend void ::f();
};
}
void f()
{
ns::C c;
c.m = 2;
}
?
代码在VS中编译成功。但是我找不到任何有关在标准中为友元声明限定名称空间的信息。它甚至是合法的吗?有人可以提供 link 或标准中的引述吗?
是的,这是合法的。
A namespace
只不过是为函数添加另一层描述的一种方式,类, &c..
任何函数都可以标记为 class
中的 friend
,即使 class
与函数位于不同的 namespace
中。该函数也可以在 namespace
中。
标准中没有关于此的具体部分,但它是标准的必然结果。这个参考是一个起点:https://en.cppreference.com/w/cpp/language/namespace