Почему в C ++ нет «чистого» ключевого слова для виртуальных функций?


31

Я всегда задавался вопросом, почему мы кодируем

virtual void MyFunction() = 0; 

и нет

pure virtual void MyFunction();

Есть ли ссылка на основу этого решения?


2
Нет мнений? Хорошо, тогда. Потому что так определяется язык C ++.
gnasher729

4
Обратите внимание, что «чистая» функция часто означает что-то не связанное.
user253751

Ответы:


71

Из Проекта и Развития C ++ - Бьярн Страуструп - Аддисон-Уэсли (ISBN 0-201-54330-3) - глава 13.2.3:

Любопытный = 0синтаксис был выбран вместо очевидной альтернативы введения нового ключевого слова pureили abstractпотому, что в то время я не видел шансов получить новое ключевое слово принятым. Если бы я предложил pure, релиз 2.0 был бы поставлен без абстрактных классов. Учитывая выбор между более приятным синтаксисом и абстрактными классами, я выбрал абстрактные классы. Вместо того, чтобы рисковать задержкой и нести определенные бои pure, я использовал традицию C и C ++, заключающуюся в использовании 0 для представления не там .

В любом случае рассмотрение стандарта C ++ (§ 9.2 - члены класса) = 0называется pure-specifier .


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% все остальное»), а не просто «чистый».
user253751
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.