Warum hat C ++ kein "reines" Schlüsselwort für virtuelle Funktionen?


31

Ich habe mich immer gefragt, warum wir codieren

virtual void MyFunction() = 0; 

und nicht

pure virtual void MyFunction();

Gibt es eine Referenz für die Grundlage dieser Entscheidung?


2
Keine Meinungen? OK dann. Denn so wird die C ++ - Sprache definiert.
gnasher729

4
Beachten Sie, dass eine "reine" Funktion oft etwas anderes bedeutet.
user253751

Antworten:


71

Aus dem Design und der Entwicklung von C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - Kapitel 13.2.3:

Die merkwürdige = 0Syntax wurde der offensichtlichen Alternative der Einführung eines neuen Schlüsselworts vorgezogen, pureoder abstractweil ich zu diesem Zeitpunkt keine Chance sah, ein neues Schlüsselwort zu akzeptieren. Hätte ich vorgeschlagen pure, hätte Release 2.0 ohne abstrakte Klassen ausgeliefert. Da ich zwischen einer besseren Syntax und abstrakten Klassen wählen konnte, entschied ich mich für abstrakte Klassen. Anstatt eine Verzögerung zu riskieren und bestimmte Kämpfe zu führen pure, habe ich die traditionelle C- und C ++ - Konvention verwendet, 0 zu verwenden, um nicht dort zu repräsentieren .

In jedem Fall wird der C ++ - Standard (§ 9.2 - Klassenmitglieder) = 0als reiner Bezeichner bezeichnet .


11
Das ist cool. Erinnert mich daran, warum PHP so viele verschiedene hässliche Funktionsnamen hat: weil der erste Interpreter, der strlen als Hash-Funktion und Verteilung verwendet, gut sein sollte ( i-programmer.info/news/98-languages/… )
Aitch

10
Durch die Einführung kontextsensitiver Schlüsselwörter in C ++ 11 wird der durch das Hinzufügen von Schlüsselwörtern verursachte Schaden verringert. Es sollte möglich sein , um pureeinen Kontext Schlüsselwort , das Sie am Ende einer Funktionsdefinition setzen, so virtual void MyFunction() purestatt = 0, zu gehen zusammen mit finalund override.
Yakk

21
Im Übrigen wird unter einer "reinen Funktion" fast überall eine Funktion verstanden, deren Ausgabe nur von ihrer Eingabe abhängt und die keine Nebenwirkungen hat.
Deduplikator

2
So ziemlich jede Frage zu "Warum macht C ++ X?" kann von diesem Buch beantwortet werden. Es sollte für jeden ernsthaften C ++ - Programmierer erforderlich sein, dies zu lesen.
Gort the Robot

4
@ Random832 es ist "rein virtuell" (wie in "100% virtuell und 0% alles andere"), nicht nur "rein".
user253751
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.