在类内定义的友元函数的完全限定名称是什么?
我最近看到一个类似于以下例子的示例。下面的 val()
的完全限定名称是什么?
#include <iostream>
namespace foo {
class A {
int x;
public:
A(int x = 0) : x(x) { }
friend int val(const A &a) { return a.x; }
};
}
int main() {
foo::A a(42);
// val() found using ADL:
std::cout << val(a) << std::endl;
// foo::val(a); // error: 'val' is not a member of 'foo'
// foo::A::val(a); // error: 'val' is not a member of 'foo::A'
return 0;
}
论证相关的查找是寻找val()
的唯一方法吗?
诚然,这并不起源于实际问题。我只是想更好地理解。
val
是foo
的成员时,这是一种情况。但是不能使用foo::val
来引用它。这很重要,因为我刚刚成功让编译器发出了一个错误消息,其中提到了val
,并且它说foo::val
。这很令人困惑,因为早些时候它说val
不是foo
的成员。 - Szabolcs