如果我在一个类中定义了一个友元函数,那么这个函数的命名空间是什么?
namespace A{namespace B{
struct S{
friend void f(S const&){};
};
}}
int main(){
A::B::S s{};
f(s); // ok
::f(s); // not ok, no f in global namespace
A::B::f(s); // no f in A::B
A::B::S::f(s); // not ok, no f in A::B::S
}
它是否有命名空间? 它是否有必要拥有命名空间?
如果我想要消除常用习语中的歧义呢?
using std::swap;
swap(a, b);
我是否被迫在类外定义它并将其声明为友元?
f(s)
之所以有效,是因为 参数依赖查找。该函数在A::B::S
的作用域中声明,但它不是类的成员。 - Some programmer dudef
在A::B
中(与其参数相同的命名空间)吗? - WalterA::B
中,而不是在A::B::S
中。它只是对于普通名称查找不可见。 - AnT stands with Russia