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?