traduccion - type casting c++
comparando int con size_t (3)
Es seguro siempre que el int
sea cero o positivo. Si es negativo, y size_t
es de rango igual o mayor que int
, entonces el int
se convertirá en size_t
y, por lo tanto, su valor negativo se convertirá en un valor positivo. Este nuevo valor positivo se compara con el valor de size_t
, que puede (en una coincidencia asombrosamente improbable) dar un falso positivo. Para estar verdaderamente seguro (y tal vez excesivamente), compruebe que el int
no es negativo primero:
/* given int i; size_t s; */
if (i>=0 && i == s)
y para suprimir las advertencias del compilador:
if (i>=0 && (size_t)i == s)
Si tengo una variable int y una variable size_t, ¿puedo compararlos como:
int i=1;
size_t y=2;
if(i==y)
// do something..
o tengo que escribir uno de ellos?
Está bien comparar un valor de size_t
con un valor int
, el valor int
se convertirá implícitamente en unsigned
type.
Algunos compiladores emitirán una advertencia cuando mezcles tipos signed
y unsigned
en las comparaciones. En ese caso, puede convertir explícitamente el valor signed
a un tipo unsigned
apropiado para suprimir la advertencia.
size_t
va a ser una especie de tipo entero (aunque posiblemente no esté firmado, por lo que podría generar una advertencia) por lo que se debería hacer el casting apropiado automáticamente.
Como ya han dicho otros, es posible que desee revisar cualquier cálculo que esté produciendo el int
y ver si puede hacerlo en size_t
en primer lugar si está calculando un tamaño requerido para algo.