C ++に仮想関数の「純粋な」キーワードがないのはなぜですか?


31

なぜ私たちがコーディングするのか疑問に思っていました

virtual void MyFunction() = 0; 

ではなく

pure virtual void MyFunction();

この決定の根拠についての参照はありますか?


2
意見がない?じゃあ それがC ++言語の定義方法だからです。
gnasher729

4
「純粋な」関数は、しばしば無関係なものを意味することに注意してください。
user253751

回答:


71

C ++の設計と進化から-Bjarne Stroustrup-Addison-Wesley(ISBN 0-201-54330-3)-章13.2.3:

好奇心= 0syntax 盛な構文は、新しいキーワードを導入するという明らかな代替案よりも、pureまたはabstractその時点で新しいキーワードが受け入れられる機会がなかったために選ばれました。私が提案したpure場合、リリース2.0は抽象クラスなしで出荷されていました。より良い構文と抽象クラスの選択を考えると、抽象クラスを選択しました。遅延を危険にさらし、特定の戦いを招くのではなくpure、私はそこにないことを表すために 0を使用する伝統的なCとC ++の慣習を使用しました

とにかく、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
ヤック

21
余談ですが、ほとんどの場合、「純粋な関数」とは、出力が入力のみに依存し、副作用のない関数であると理解されています。

2
「C ++でXを使用する理由」という質問はほとんどありません。その本で答えることができます。真面目なC ++プログラマーには必ず読む必要があります。
ロボット

4
@ Random832それは「純粋な」だけでなく、「「純粋な仮想」(「100%仮想、0%その他」など)です。
user253751
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.