vit*_*aut 4 c++ operator-overloading
如何获取在类体中定义为朋友的重载运算符的地址?
我尝试了以下内容
struct S {
friend bool operator==(S, S) { return true; }
};
int main() {
bool (*f)(S, S) = &operator==;
}
Run Code Online (Sandbox Code Playgroud)
但是gcc给出了一个错误
test.cc: In function ‘int main()’:
test.cc:6:30: error: ‘operator==’ not defined
bool (*f)(S, S) = &operator==;
^
Run Code Online (Sandbox Code Playgroud)
可以通过在(全局)命名空间中声明运算符来修复:
bool operator==(S, S);
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有重新声明运营商的情况下获取地址?
在类或类模板X中的友元声明中首先声明的名称成为X的最内层封闭命名空间的成员,但是无法进行查找(除了依赖于参数的查找X),除非命名空间范围内的匹配声明是提供
http://en.cppreference.com/w/cpp/language/friend,强调我的.
一般来说,你应该总是在一个类之外声明你的朋友,除非你明确地希望将它们隐藏在除ADL之外的任何查找中(这可能是好主意而可能不是,我没有足够的经验来判断,这真的取决于情况.