Rozważmy typ bar
który zdefiniowany przez użytkownika operatory konwersji do referencji typu bar
:W jakich okolicznościach zostanie wywołany operator konwersji typu?
struct bar
{
operator bar &();
operator const bar &() const;
};
Kiedy te konwersje być stosowane? Co ponadto oznacza, że operatorzy ci byli deleted
? Czy jest jakieś interesujące zastosowanie którejś z tych funkcji?
Poniższy program nie wydaje się mieć zastosowanie zarówno konwersję:
#include <iostream>
struct bar
{
operator bar &()
{
std::cout << "operator bar &()" << std::endl;
return *this;
}
operator const bar &() const
{
std::cout << "operator const bar &() const" << std::endl;
return *this;
}
};
void foo(bar x)
{
}
int main()
{
bar x;
bar y = x; // copy, no conversion
y = x; // assignment, no conversion
foo(x); // copy, no conversion
y = (bar&)x; // no output
y = (const bar&)x; // no output
return 0;
}
Wygląda na to, że kompilator mógłby wtedy wysłać użyteczne ostrzeżenie. –
Dzięki. Każdy pomysł, dlaczego mogę zdefiniować takie funkcje, jeśli nigdy nie można ich użyć? –