Чому C ++ не має "чистого" ключового слова для віртуальних функцій?


31

Я завжди цікавився, чому ми кодуємо

virtual void MyFunction() = 0; 

і ні

pure virtual void MyFunction();

Чи є посилання на основу цього рішення?


2
Немає думок? Добре тоді. Тому що так визначається мова C ++.
gnasher729

4
Зауважте, що "чиста" функція часто означає щось незв'язане.
користувач253751

Відповіді:


71

Із проектування та еволюції C ++ - Bjarne Stroustrup - Аддісон-Веслі (ISBN 0-201-54330-3) - глава 13.2.3:

Цікавий = 0синтаксис був обраний через очевидну альтернативу введення нового ключового слова pureабо abstractчерез те, що я не бачив жодного шансу отримати нове ключове слово. Якби я запропонував pure, випуск 2.0 був би поставлений без абстрактних класів. З урахуванням вибору між приємнішим синтаксисом та абстрактними класами, я вибрав абстрактні класи. Замість того, щоб ризикувати затримкою і зазнавати певних боїв pure, я використав традицію C і C ++, щоб використовувати 0, щоб не представляти там .

У будь-якому випадку, дивлячись на стандарт C ++ (§ 9.2 - Члени класу) = 0, називається чисто специфікатором .


11
круто. Нагадує мені, чому PHP має стільки різних некрасивих імен функцій: адже перший інтерпретатор використовував strlen як хеш-функцію та розповсюдження повинен бути гарним ( i-programmer.info/news/98-languages/… )
Aitch

10
Введення контекстно-залежних ключових слів у C ++ 11 зменшує шкоду, який викликає додавання ключових слів. Повинно бути можливим скласти pureконтекстне ключове слово, яке ви введете в кінці визначення функції, тож virtual void MyFunction() pureзамість того = 0, щоб перейти разом з finalі override.
Якк

21
З іншого боку, майже скрізь під "чистою функцією" розуміється функція, вихід якої залежить лише від її входу і яка не має побічних ефектів.
Дедуплікатор

2
Насправді будь-яке питання "чому C ++ робить X?" можна відповісти цією книгою. Для будь-якого серйозного програміста C ++ його слід прочитати.
Gort the Robot

4
@ Random832 це "чистий віртуальний" (як у "100% віртуальному та 0% будь-що інше"), а не просто "чистий".
користувач253751
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.