다음 프로그램을 고려 변환 연산자 대 연산자 과부하 비교 우선 순위 : USE_COMPARE
정의 할 때, if (f<m)
의 비교 연산자 비교 과부하를 사용C++
#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
이 정의되어 있지 않으면 f
을 Foo
에서 int
으로 변환 한 다음 정수를 비교합니다. 비교 연산자 오버로드는 변환 연산자보다 우선 순위가 높습니다. C++ 표준 관점에서 이것을 확인할 수 있습니까?
그러나 비교 연산자가 우선해야한다고 생각합니다. 그러나 C++ 표준의 관점에서 질문에 대답하십시오.
감사합니다.
하지만 분명히'<'연산자 오버로드를 정의 했으므로 변환이 필요 없기 때문에 연산자 오버로드를 사용해야합니다. 맞습니까? –
@Robin Hsu, 이것은 실제로 답변으로 작성되었습니다. – ForEveR
당신은 두 가지 차이가 존재한다고 말하고있는 것 같습니다. 두 가지 모두 합법적이고 일부 컴파일러는 이것을하고 다른 것은 그렇게한다는 것을 의미합니까? 아니면 더 설명해 주시고 가난한 영어를 용서해 주시겠습니까? (또는 가난한 C++ :-)) –