Prefijo y postfix ++
son operadores diferentes. Con la declaración de estilo estándar Foo operator symbol(Foo &)
, no había una manera obvia de distinguir los dos. En lugar de presentar una nueva sintaxis como Foo symbol operator(Foo &)
que lo convertiría en un caso especial a diferencia de todos los demás operadores y probablemente un poco doloroso de analizar, los diseñadores de idiomas querían alguna otra solución.
La solución que eligieron era un tanto extraña. Observaron que todos los demás operadores 'postfix' (es decir, operadores que ocurrieron después de uno de sus operandos) eran en realidad operadores infija que tomaban dos argumentos. Por ejemplo, simple viejo +
o -
. Sobre esta base, los diseñadores del lenguaje decidieron que tener un argumento ficticio aleatorio sería una buena forma de distinguir entre el prefijo y el postfijo ++
.
En mi humilde opinión, es una de las decisiones más extrañas tomadas a medida que C++ evolucionó. Pero ahí lo tienes.
Y no puede distinguirlos según el tipo de devolución por dos razones.
La primera es que las funciones en C++ no se pueden sobrecargar en el tipo de devolución. No puede tener dos funciones que tengan nombres idénticos y listas de tipos de parámetros pero diferentes valores de retorno.
El segundo es que el método no sería lo suficientemente robusto o flexible como para manejar todas las posibles implementaciones de prefijo y postfix ++
.
Por ejemplo, puede querer un postfijo ++
que devolvió un tipo de referencia si la única razón por la que lo llamó fue para invocar un efecto secundario no relacionado con el valor de la variable a la que lo estaba aplicando. En mi opinión, esa sería una implementación muy mala, pero C++ no se trata de juzgar qué tipo de código estúpido quieres escribir, sino de permitirte escribir el código que consideres apropiado para la situación. Y forzarle a usar un estilo particular de tipo de devolución para el prefijo ++
y postfix ++
sería contrario a ese espíritu.
Las * solo * sobrecargas de tiempo C++ por tipo de retorno son para el operador de tipo de cambio. –
@Mike: no creo que la resolución de sobrecarga entre en juego en ese caso. –
Buen punto. Siempre lo he pensado como "sobrecargar al operador de tipografía", pero tal vez haya un término mejor. –