¿Por qué convertir los valores de retorno no utilizados en anulados?
int fn();
void whatever()
{
(void) fn();
}
¿Hay alguna razón para anular un valor de retorno no utilizado, o tengo razón al pensar que es una completa pérdida de tiempo?
La respuesta de David cubre prácticamente la motivación para esto, mostrar explícitamente a otros "desarrolladores" que usted sabe que esta función regresa pero la está ignorando explícitamente.
Esta es una manera de garantizar que siempre se manejen los códigos de error necesarios.
Creo que para C++ este es probablemente el único lugar en el que prefiero usar conversiones estilo C también, ya que usar la notación de conversión estática completa parece excesivo aquí. Finalmente, si está revisando un estándar de codificación o escribiendo uno, también es una buena idea indicar explícitamente que las llamadas a operadores sobrecargados (que no usan notación de llamadas a funciones) también deberían estar exentas de esto:
class A {};
A operator+(A const &, A const &);
int main () {
A a;
a + a; // Not a problem
(void)operator+(a,a); // Using function call notation - so add the cast.
En el trabajo usamos eso para reconocer que la función tiene un valor de retorno, pero el desarrollador ha afirmado que es seguro ignorarlo. Como etiquetó la pregunta como C++, debería usar static_cast :
static_cast<void>(fn());
En lo que respecta al compilador, convertir el valor de retorno en void tiene poco significado.
La verdadera razón para hacer esto se remonta a una herramienta utilizada en código C, llamada lint .
Analiza código buscando posibles problemas y emitiendo advertencias y sugerencias. Si una función devolviera un valor que luego no fue verificado, lint
avisaría en caso de que esto fuera accidental. Para silenciar lint
esta advertencia, envía la llamada a (void)
.