Этот пример из "Мышление в C ++", у меня есть один вопрос, касающийся компилятора, синтезирующего функцию преобразования оператора.
Вопрос
Когда передается объект класса Four (ввызов функции f ()), вызывается операция перегрузки ().Но я не могу разобрать используемую логику (компилятор синтезирует вызов операции) компилятором для достижения этого преобразования.
На максимуме я могу ожидать явного поведения преобразования, например
1. obj3 = (Три) obj4;
2. obj3 = Три (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)
} ///:~