Dlaczego C ++ nie ma „czystego” słowa kluczowego dla funkcji wirtualnych?

31

Zawsze zastanawiałem się, dlaczego kodujemy

virtual void MyFunction() = 0; 

i nie

pure virtual void MyFunction();

Czy istnieje odniesienie do podstawy tej decyzji?

Mawg
źródło
2
Brak opinii Ok więc. Ponieważ tak definiuje się język C ++.
gnasher729
4
Zauważ, że „czysta” funkcja często oznacza coś niezwiązanego.
user253751

Odpowiedzi:

71

Od projektowania i ewolucji C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - rozdział 13.2.3:

Dziwna = 0składnia została wybrana zamiast oczywistej alternatywy wprowadzenia nowego słowa kluczowego purelub abstractdlatego, że w tym czasie nie widziałem szansy na zaakceptowanie nowego słowa kluczowego. Gdybym zasugerował pure, wersja 2.0 zostałaby dostarczona bez abstrakcyjnych klas. Mając wybór między ładniejszą składnią a klasami abstrakcyjnymi, wybrałem klasy abstrakcyjne. Zamiast ryzykować opóźnienie i ponoszenia pewnych walk nad pureużyłem tradycji C i C ++ konwencję za pomocą 0 do reprezentowania nie istnieje .

W każdym razie patrzenie na standard C ++ (§ 9.2 - Członkowie klasy) = 0nazywa się czysto specyfikatorem .

manlio
źródło
11
to super. Przypomina mi, dlaczego PHP ma tak wiele różnych brzydkich nazw funkcji: ponieważ pierwszy interpreter użył strlen jako funkcji skrótu i ​​dystrybucji powinien być dobry ( i-programmer.info/news/98-languages/... )
Aitch
10
Wprowadzenie kontekstowych słów kluczowych w C ++ 11 zmniejsza szkody powodowane przez dodanie słów kluczowych. Powinno być możliwe, aby purekontekstowe słowa kluczowego można umieścić na końcu definicji funkcji, więc virtual void MyFunction() purezamiast = 0, aby przejść wraz z finala override.
Yakk
21
Nawiasem mówiąc, prawie wszędzie „czysta funkcja” jest rozumiana jako funkcja, której wynik zależy tylko od jej wejścia i która nie ma skutków ubocznych.
Deduplicator
2
Prawie każde pytanie „dlaczego C ++ robi X?” ta książka może odpowiedzieć. Powinien być wymagany odczyt dla każdego poważnego programisty C ++.
Gort the Robot
4
@ Random832 to „czysty wirtualny” (jak w „100% wirtualnym i 0% cokolwiek innego”), a nie tylko „czysty”.
user253751