static_cast cast c++ c++11 boolean type-conversion explicit-conversion

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?