Perché C ++ non ha una parola chiave "pura" per funzioni virtuali?


31

Mi sono sempre chiesto perché codifichiamo

virtual void MyFunction() = 0; 

e non

pure virtual void MyFunction();

C'è un riferimento per la base di questa decisione?


2
Nessuna opinione? Va bene allora. Perché è così che viene definito il linguaggio C ++.
gnasher729,

4
Nota che una funzione "pura" spesso significa qualcosa di non correlato.
user253751

Risposte:


71

Da The Design and Evolution of C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - capitolo 13.2.3:

La curiosa = 0sintassi è stata scelta rispetto all'ovvia alternativa dell'introduzione di una nuova parola chiave pureo abstractperché al momento non vedevo alcuna possibilità di ottenere una nuova parola chiave accettata. Se avessi suggerito pure, la versione 2.0 sarebbe stata spedita senza classi astratte. Con una scelta tra una sintassi migliore e le classi astratte, ho scelto le classi astratte. Piuttosto che rischiare il ritardo e incorrere in alcuni scontri pure, ho usato la tradizionale convenzione C e C ++ di usare 0 per rappresentare non lì .

Comunque, guardare lo standard C ++ (§ 9.2 - Membri della classe) = 0è chiamato puro-specificatore .


11
questo è figo. Mi ricorda perché PHP ha così tanti nomi di funzioni brutte diverse: perché il primo interprete ha usato strlen come funzione hash e distribuzione dovrebbe essere buono ( i-programmer.info/news/98-languages/… )
Aitch

10
L'introduzione di parole chiave sensibili al contesto in C ++ 11 ha ridotto il danno causato dall'aggiunta di parole chiave. Dovrebbe essere possibile creare pureuna parola chiave contestuale che hai inserito alla fine della definizione di una funzione, quindi al virtual void MyFunction() pureposto di = 0, andare insieme a finale override.
Yakk,

21
Per inciso, quasi ovunque una "funzione pura" è intesa come una funzione il cui output dipende solo dal suo input e che non ha effetti collaterali.
Deduplicatore,

2
Praticamente qualsiasi domanda di "perché C ++ fa X?" può essere risposto da quel libro. Dovrebbe essere necessario leggere per qualsiasi programmatore C ++ serio.
Gort the Robot,

4
@ Random832 è "puro virtuale" (come in "100% virtuale e 0% qualsiasi altra cosa"), non solo "puro".
user253751
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.