2013-10-16 21 views
7

Załóżmy zdefiniować niejawny funkcję konwersji do siebie:Czy kiedykolwiek zostanie wywołana funkcja niejawnej konwersji?

#include <iostream> 

class Foo { 
public: 
    operator Foo() { 
    std::cout << "wha??\n"; 
    return Foo(); 
    } 
}; 

void f(Foo f) {} 

int main() { 
    Foo foo; 
    f(foo); 
} 

Dlaczego miałbym to określić? Cóż, nigdy nie napisałbym tego bezpośrednio, ale może się to zdarzyć poprzez instancję szablonu w klasie szablonu, którą piszę. Jeśli tak się stanie, mam nadzieję, że zdefiniowanie funkcji konwersji jest faktycznie operacją "no-op" i nie można jej wywołać.

Powyższy program niczego nie drukuje (co jest świetne). Czy jest jakaś okoliczność, w której ta funkcja konwersji zostanie wywołana?

+0

Ups! To był literówka. Naprawiony. –

Odpowiedz

11

Jest to poprawne, ale nigdy nie nazywano, ze względu n3376 12.3.2/1

Funkcja konwersja nie jest wykorzystywany do konwersji (ewentualnie CV-kwalifikowana) sprzeciwić się (ewentualnie CV-kwalifikowanej) ten sam typ obiektu (lub odniesienie do niego)

+0

+1 za ofertę. – Nawaz

Powiązane problemy