이 예제는 "Thinking in C++"에서 온 것입니다. 저는 연산자 변환 함수를 합성하는 컴파일러에 관한 한 가지 질문이 있습니다. 네 클래스 객체가 전달되면합성 변환 오버로드 C++ 연산자
질문
는 은 (함수 호출에서 F()), 과부하 동작() 불린다. 하지만 나는이 변환을 달성하기 위해 컴파일러에 의해 사용 된 로직 (컴파일러가 연산 호출을 종합)을 만들 수 없다.
최대 값은 다음과 같이 명시적인 변환 동작을 기대할 수 있습니다.
1. obj3 = (3) obj4;
2. obj3 = 3 (obj4);
3. obj3 = static_cast <Three
> (obj4);
이제 위의 변환 중 하나 - 컴파일러는 어떻게 합성합니까?
(세) obj4.operator()?
일부 중요한 부분이 누락되었습니다.
예
//: C12:Opconv.cpp
// Op overloading conversion
class Three {
int i;
public:
Three(int ii = 0, int = 0) : i(ii) {}
};
class Four {
int x;
public:
Four(int xx) : x(xx) {}
operator Three() const { return Three(x); }
};
void g(Three) {}
int main() {
Four four(1);
g(four);
g(1); // Calls Three(1,0)
} ///:~