【发布时间】:2015-02-05 07:51:13
【问题描述】:
考虑以下程序:
#include <iostream>
using namespace std;
class Foo {
public:
int k;
operator int() {
cout << "convert int" << endl;
return k;
}
#if USE_COMPARE
bool operator < (int rhs) {
cout << "compare with" << endl;
return (k < rhs);
}
#endif
};
int main()
{
Foo f;
f.k = 3;
int m = 5;
if (f < m) {
cout << 1 << endl;
return 1;
}
cout << 0 << endl;
return 0;
}
当定义USE_COMPARE 时,if (f<m) 的比较将使用比较运算符重载。如果没有定义USE_COMPARE,它会将f从Foo转换为int,然后进行整数比较。在我看来,比较运算符重载的优先级高于转换运算符。任何人都可以从 C++ 标准的角度确认这一点吗?
但我认为比较运算符应该优先考虑是很自然的。但请从C++标准的角度回答问题。
谢谢。
【问题讨论】:
标签: c++ operator-overloading operator-precedence