Pourquoi C ++ n'a-t-il pas de mot-clé «pur» pour les fonctions virtuelles?


31

Je me suis toujours demandé pourquoi nous codions

virtual void MyFunction() = 0; 

et pas

pure virtual void MyFunction();

Y a-t-il une référence sur la base de cette décision?


2
Pas d'opinions? Alors ok. Parce que c'est ainsi que le langage C ++ est défini.
gnasher729

4
Notez qu'une fonction "pure" signifie souvent quelque chose de non lié.
user253751

Réponses:


71

Tiré de La conception et l'évolution du C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - chapitre 13.2.3:

La curieuse = 0syntaxe a été choisie plutôt que l'alternative évidente d'introduire un nouveau mot clé pureou abstractparce qu'à l'époque je ne voyais aucune chance de faire accepter un nouveau mot clé. Si j'avais suggéré pure, la version 2.0 aurait été livrée sans classes abstraites. Étant donné le choix entre une syntaxe plus agréable et des classes abstraites, j'ai choisi des classes abstraites. Plutôt que de risquer un retard et d'encourir certains combats pure, j'ai utilisé la tradition C et C ++ de l'utilisation de 0 pour ne pas y figurer .

Quoi qu'il en soit, regarder la norme C ++ (§ 9.2 - Membres de classe) = 0est appelé pur-spécificateur .


11
c'est super. Cela me rappelle pourquoi PHP a tant de noms de fonctions moches différents: parce que le premier interprète a utilisé strlen comme fonction de hachage et la distribution devrait être bonne ( i-programmer.info/news/98-languages/… )
Aitch

10
L'introduction de mots clés contextuels en C ++ 11 a réduit les dommages que l'ajout de mots clés provoque. Il devrait être possible de faire pureun mot-clé contextuel que vous mettez à la fin d'une définition de fonction, donc virtual void MyFunction() pureau lieu de = 0, pour aller avec finalet override.
Yakk

21
Soit dit en passant, presque partout une «fonction pure» est considérée comme une fonction dont la sortie ne dépend que de son entrée et qui n'a pas d'effets secondaires.
Déduplicateur

2
À peu près n'importe quelle question de "pourquoi C ++ fait-il X?" peut être répondu par ce livre. Il devrait être nécessaire de lire pour tout programmeur C ++ sérieux.
Gort le robot

4
@ Random832 c'est "pur virtuel" (comme dans "100% virtuel et 0% autre chose"), pas seulement "pur".
user253751
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.