Considere un tipo bar
que ha definida por el usuario operadores de conversión a las referencias de tipo bar
:¿Bajo qué circunstancias se invocaría el operador de conversión de un tipo a sí mismo?
struct bar
{
operator bar &();
operator const bar &() const;
};
Cuando se aplicaría estas conversiones? Además, ¿qué implica si estos operadores fueran deleted
? ¿Hay algún uso interesante de cualquiera de las características?
El siguiente programa no aparece entre aplicar la conversión:
#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;
}
Parece que un compilador podría emitir una advertencia útil aquí. –
Gracias. ¿Alguna idea de por qué se me permite definir tales funciones si nunca se pueden usar? –