【发布时间】:2011-05-20 18:48:50
【问题描述】:
当你让一个类的成员函数成为它自己的朋友时会发生什么!?
下面的代码编译并运行。如果没有朋友声明,就会生成“操作员的参数太多”(这是正确的)。我意识到这样做没有任何意义,但谁能告诉我这里发生了什么?朋友会以某种方式强制编译器省略默认的这个参数吗?
class Test
{
public:
friend bool operator<(Test& lhs, Test& rhs)
{
return true;
}
};
int main( int c, char** argv)
{
Test test1;
Test test2;
return test1 < test2;
}
【问题讨论】:
-
回答您的问题:Friends 不能成为 C++03 中交友类的成员,但在 C++0x 中是允许的。
-
我很好奇,既然成员函数已经拥有完全访问权限,那么允许成员函数成为它自己的朋友有什么意义?
-
查看 open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#77 或历史(尽管这种特殊情况并不重要,因为嵌套类可以完全访问 c++0x 和大多数 c++03 编译器中的嵌套类) )。
标签: c++ operator-overloading friend