2010-01-10 11 views
15

Para una clase A, un operador de conversión entero se parecería a algo así como;¿Cómo devuelve el operador de conversión un valor?

operator int() //Here we don't specify any return type 
{ 
    return intValue; 
} 

¿Cómo es que la función anterior puede devolver un valor cuando parece que no se especifica su valor de retorno? No parece devolver "nada", pero sé que no es void.

¿Qué significa esto cuando no se especifica un tipo de devolución?

+0

Creo que elevar la importancia del tipo de firma demasiado es la barrera en su pensamiento. La firma de tipo es * generalmente * lo que le dice el tipo de retorno - * excepto * en el caso de las funciones de conversión, donde el tipo de retorno viene dado por lo que sintácticamente se parece al "nombre" de la función. –

Respuesta

20

El tipo de devolución de operator T() es siempre T. Es un caso especial de C++.

No utiliza sintaxis de la función prototipo estándar T foo() PORQUE 2 funciones con el mismo nombre que sólo difieren por el tipo de retorno no puede coexistir (por ejemplo int foo() conflictos con double foo()). Si se usa esta sintaxis, solo puede definir 1 sobrecarga del operador de conversión, lo cual es indeseable.

+0

+1 por mencionar sobrecargas de tipo de retorno –

6

El valor de retorno de operator T() donde T es un tipo siempre es T.

3

El nombre del operador de conversión es su tipo. Si este no fuera el caso, podría definir un operador de conversión int (por ejemplo) que realmente devolvió un doble. Una línea de pensamiento similar se aplica a los constructores, que tampoco tienen un tipo de devolución.

Cuestiones relacionadas