¿Por qué C ++ no tiene una palabra clave "pura" para funciones virtuales?

31

Siempre me he preguntado por qué codificamos

virtual void MyFunction() = 0; 

y no

pure virtual void MyFunction();

¿Hay alguna referencia para la base de esta decisión?

Mawg
fuente
2
No hay opiniones? OK entonces. Porque así es como se define el lenguaje C ++.
gnasher729
44
Tenga en cuenta que una función "pura" a menudo significa algo no relacionado.
user253751

Respuestas:

71

Del diseño y evolución de C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - capítulo 13.2.3:

La = 0sintaxis curiosa se eligió sobre la alternativa obvia de introducir una nueva palabra clave pureo abstractporque en ese momento no vi ninguna posibilidad de que se aceptara una nueva palabra clave. Si hubiera sugerido pure, la versión 2.0 se habría enviado sin clases abstractas. Dada la opción entre una sintaxis más agradable y clases abstractas, elegí clases abstractas. En lugar de arriesgarse a demorar e incurrir en ciertas peleas pure, usé la convención tradicional C y C ++ de usar 0 para representar no allí .

De todos modos, mirar el estándar C ++ (§ 9.2 - Miembros de la clase) = 0se llama especificador puro .

manlio
fuente
11
Eso es genial. Me recuerda por qué PHP tiene tantos nombres diferentes de funciones feas: porque el primer intérprete usó strlen como función hash y la distribución debería ser buena ( i-programmer.info/news/98-languages/… )
Aitch
10
La introducción de palabras clave sensibles al contexto en C ++ 11 ha reducido el daño que causa agregar palabras clave. Debería ser posible crear pureuna palabra clave contextual que coloque al final de una definición de función, de modo que, en virtual void MyFunction() purelugar de = 0, vaya junto con finaly override.
Yakk
21
Por otro lado, en casi todas partes se entiende que una "función pura" es una función cuya salida solo depende de su entrada, y que no tiene efectos secundarios.
Deduplicador
2
Casi cualquier pregunta de "¿por qué C ++ hace X?" puede ser respondido por ese libro. Debería requerirse lectura para cualquier programador serio de C ++.
Gort the Robot
44
@ Random832 es "puro virtual" (como en "100% virtual y 0% cualquier otra cosa"), no solo "puro".
user253751