Intenta interpretar el código de forma correcta previamente a aplicarlo a tu proyecto si tdeseas aportar algo puedes dejarlo en los comentarios.
Solución:
Un elenco, como sugirió Blaz Bratanic:
size_t data = 99999999;
int convertdata = static_cast(data);
es probable que silencie la advertencia (aunque, en principio, un compilador puede advertir sobre lo que quiera, incluso si hay un lanzamiento).
Pero no resuelve el problema del que te hablaba la advertencia, es decir, que una conversión de size_t
para int
realmente podría desbordarse.
Si es posible, diseñe su programa para que no necesitar para convertir un size_t
valor a int
. Solo guárdelo en un size_t
variable (como ya lo ha hecho) y utilícela.
Convirtiendo a double
no causará un desbordamiento, pero podría resultar en una pérdida de precisión para un número muy grande size_t
valor. Una vez más, no tiene mucho sentido convertir un size_t
a un double
; aún es mejor mantener el valor en un size_t
variable.
(La respuesta de R Sahu tiene algunas sugerencias si no puede evitar el lanzamiento, como lanzar una excepción en el desbordamiento).
Si su código está preparado para lidiar con errores de desbordamiento, puede lanzar una excepción si data
Es demasiado largo.
size_t data = 99999999;
if ( data > INT_MAX )
throw std::overflow_error("data is larger than INT_MAX");
int convertData = static_cast(data);
Reparto estático:
static_cast(data);