为什么C ++没有虚函数的“ pure”关键字?


31

我一直想知道为什么我们要编码

virtual void MyFunction() = 0; 

并不是

pure virtual void MyFunction();

该决定是否有参考依据?


2
没有意见吗?那好吧。因为这就是C ++语言的定义方式。
gnasher729

4
请注意,“纯”功能通常表示不相关的内容。
user253751

Answers:


71

摘自C ++的设计和演进 -Bjarne Stroustrup-Addison-Wesley(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一起使用。finaloverride
Yakk

21
顺便说一句,几乎在任何地方,“纯函数”都应理解为一种函数,其输出仅取决于其输入,并且没有副作用。
Deduplicator 2015年

2
几乎所有关于“为什么C ++会执行X?”的问题 那本书可以回答。任何认真的C ++程序员都应该阅读该书。
Gort机器人2015年

4
@ Random832,它是“纯虚拟的”(如“ 100%虚拟和0%的其他任何东西”),而不仅仅是“纯”。
user253751
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.