- 论坛徽章:
- 0
|
本帖最后由 uosoul 于 2015-07-16 22:40 编辑
- struct M
- {
- public:
- bool operator==(const M&){ cout << "1" << endl; return true; }
- };
- bool operator==(const M&, const M&){ cout << "2" << endl; return true; }
- int _tmain(int argc, _TCHAR* argv[])
- {
- fun(3)(20);
- const M m1;
- const M m2;
- m1 == m2;
- M m3, m4;
- m3 == m4;
- return 0;
- }
复制代码 这段代码的输出是:
2
1
非常奇怪,同样是重载操作符==
如果类内部的重载操作符优先级比较高,那么是不是都应该输出1? 为什么第一个==是调用了全局函数的版本呢?
如果我把m3的类型也改成const,像这样:
- const M m3;
- M m4;
- m3 == m4;
复制代码 那么上面代码输出就变成了
2
2
而如果改成:
- M m3;
- const M m4;
- m3 == m4;
复制代码 那么还是
2
1
这里的重载解析规则到底是什么呢? 还请大侠指教! |
|