2010-11-14 9 views
6

Possible Duplicate:
casting unused return values to voidC++ ¿Cuál es el propósito del casting para anular?

leí algo de código fuente, y en él muchas funciones virtuales en las clases de interfaz son declarados y por defecto en práctica, como por ejemplo:

virtual bool FunctionName(TypeName* pointer) 
{ 
    (void)pointer; 
    return true; 
} 

puedo preguntar cuál es el propósito de echar el puntero anular en la implementación predeterminada?

+2

Esto no debería compilarse, ya que la función necesita devolver un valor. –

+1

Eso se preguntó en numerosas ocasiones. Lanzar algo a 'void' indica que no estás usando el valor de retorno. En tu caso, es un no-op. – zneak

+0

@zneak: 'puntero' no es un valor de retorno. No es una tontería de esa pregunta, aunque estoy seguro de que esto también se ha cubierto anteriormente para los parámetros. –

Respuesta

18

de usos generales en función de lo que lances

  • Marcar su intención al compilador que una expresión que es totalmente no-op pretende ser escrita (por inhibición de las advertencias, por ejemplo)
  • Marcar su intención para el compilador y programador que el resultado de algo se ignora (el resultado de una llamada a función, por ejemplo)
  • En una plantilla de función, si un tipo de devolución viene dado por un parámetro de plantilla tipo T, y devuelve el resultado de alguna llamada a función que podría ser diferente de T en alguna situación. Una conversión explícita a T podría, en el caso void, evitar un error de tiempo de compilación:
    int f() { return 0; } void g() { return (void)f(); }
  • Inhibir el compilador para elegir una sobrecarga del operador coma ((void)a, b nunca invocará una función sobrecargada operador coma).

Tenga en cuenta que las garantías establecidas en que nunca habrá una llamada operator void() si lanzas un objeto de clase a void (algunas versiones del CCG ignorar esa regla, sin embargo).

12

En este caso, es solo para evitar la advertencia del compilador sobre el parámetro no utilizado.

+0

+1: para dar la respuesta correcta –

+0

¿Por qué hacer tal parámetro en primer lugar? – stackptr

+1

El parámetro podría ocurrir porque alguna otra clase que también implementa esta función virtual realmente usa ese parámetro. –

Cuestiones relacionadas