overload operator c++ function-overloading

c++ - operator - ¿Por qué pasar el literal 3 elige la sobrecarga int en lugar de la sobrecarga corta?



overload operator() c++ (5)

¿Cómo maneja C ++ la sobrecarga de funciones en este caso?

#include <iostream> void func(int x) { std::cout << "integer"; } void func(short x) { std::cout << "short"; } int main(void) { func(3); }

Salida : entero

¿Porqué es eso?


La constante 3 tiene su propio tipo, en este caso es un int . Debe convertir explícitamente su constante a short si desea que se ejecute su sobrecarga

fun((short)3);


Las constantes tienen tipos también. Y sin un sufijo para indicar lo contrario, 3 es simplemente una constante int . El compilador elegirá un tipo más grande si la constante es demasiado grande, pero no irá por cosas más pequeñas que un int por defecto.

Ahora, sucede que no hay sufijo para hacer una breve constante. Necesitaría agregar un molde si desea que se llame a esa sobrecarga en particular.


Porque 3 es un entero

fun(static_cast<short>(3));

Llamaría a la versión corta.

O puede usar literales definidos por el usuario para hacer un corto: vea aquí


Tú lo estás haciendo

fun(3);

y 3 es un entero literal constante, por lo que la función que mejor se adapta a la sobrecarga es esta

void fun(int x) { std::cout << "integer"; }

siéntete libre de jugar un poco con los tipos y lanzando esos como:

fun(short(3)); fun(int(3)); // C++11 auto x = 3; fun(x);


3 tiene es constante e implícitamente tiene tipo int

Para la ejecución de la función short sobrecargada, debe usar la var short o la constante de recast .

short s = 3; fun(s);

o

fun((short)3); fun(static_cast<short>(3));

short no tiene un sufijo como long - L , pero puedes crear uno.