static_cast - cast c++>
¿Por qué no se llama mi "operador explícito bool()"? (1)
Como A()
no es const
, se selecciona el operator int()
. Solo agrega const
al otro operador de conversión y funciona:
#include <iostream>
using namespace std;
struct A
{
explicit operator bool() const
{
std::cout << "bool: ";
return true;
}
operator int() const
{
std::cout << "int: ";
return 0;
}
};
int main()
{
if (A())
{
cout << "true" << endl;
}
else
{
cout << "false" << endl;
}
}
Ejemplo en vivo que imprime: "bool: true" y sin la const
imprime "int: false"
Alternativamente, crea una constante con nombre:
// operator int() without const
int main()
{
auto const a = A();
if (a)
// as before
}
Ejemplo en vivo que imprime "bool: true".
#include <iostream>
using namespace std;
struct A
{
explicit operator bool() const
{
return true;
}
operator int()
{
return 0;
}
};
int main()
{
if (A())
{
cout << "true" << endl;
}
else
{
cout << "false" << endl;
}
}
Mi expectativa era que A()
se convertiría contextualmente a bool
usando mi operator bool()
, y por lo tanto se imprimiría true
.
Sin embargo, el resultado es false
, mostrando que el operator int()
fue invocado en su lugar.
¿Por qué mi explicit operator bool
no se llama como se esperaba?