Por que o C ++ não possui uma palavra-chave "pura" para funções virtuais?

31

Eu sempre me perguntei por que codificamos

virtual void MyFunction() = 0; 

e não

pure virtual void MyFunction();

Existe uma referência para a base desta decisão?

Mawg
fonte
2
Sem opiniões? OK então. Porque é assim que a linguagem C ++ é definida.
gnasher729
4
Observe que uma função "pura" geralmente significa algo não relacionado.
User253751

Respostas:

71

De Design e evolução de C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - capítulo 13.2.3:

A = 0sintaxe curiosa foi escolhida em detrimento da alternativa óbvia de introduzir uma nova palavra pure- chave ou abstractporque, na época, eu não via chance de obter uma nova palavra-chave aceita. Se eu sugerisse pure, o Release 2.0 seria enviado sem classes abstratas. Dada a escolha entre uma sintaxe mais agradável e as classes abstratas, eu escolhi as classes abstratas. Em vez de arriscar atrasar e incorrer em certas brigas pure, usei a tradição C e C ++ de usar 0 para representar não lá .

De qualquer forma, observar o padrão C ++ (§ 9.2 - Membros da classe) = 0é chamado de puro especificador .

manlio
fonte
11
isso é legal. Lembra-me de por que PHP tem tantas diferentes nomes de função feias: porque o primeiro intérprete usou strlen como função e distribuição de hash deve ser bom ( i-programmer.info/news/98-languages/... )
Aitch
10
A introdução de palavras-chave sensíveis ao contexto no C ++ 11 reduz o dano causado pela adição de palavras-chave. Deveria ser possível criar pureuma palavra-chave contextual que você colocou no final de uma definição de função, portanto, em virtual void MyFunction() purevez de = 0, ir junto com finale override.
Yakk
21
Como um aparte, em quase todo lugar uma "função pura" é entendida como uma função cuja saída depende apenas de sua entrada e que não tem efeitos colaterais.
Deduplicator
2
Praticamente qualquer pergunta sobre "por que o C ++ faz X?" pode ser respondido por esse livro. Deve ser leitura obrigatória para qualquer programador C ++ sério.
Gort the Robot
4
@ Random832 é "virtual puro" (como em "100% virtual e 0% qualquer outra coisa"), não apenas "puro".
User253751