Des fonctions virtuelles pures sont celles des fonctions membres qui sont virtuels et ont le pur-spécificateur ( = 0;
)
La Clause 10.4 paragraphe 2 de C++03 nous dit ce qu'est une classe abstraite est et, comme une note côté, le suivant:
[Note: une déclaration de fonction ne peut pas fournir à la fois un pur-spécificateur et une définition -la note de fin] [Exemple:
struct C {
virtual void f() = 0 { }; // ill-formed
};
fin de l'exemple]
Pour ceux qui ne sont pas très familiers avec le problème, veuillez noter que les fonctions virtuelles pures peuvent avoir des définitions , mais la clause ci-dessus interdit de telles définitions apparaissent en ligne (lexicalement dans la classe). (Pour l'utilisation de la définition des fonctions virtuelles pures, vous pouvez voir, par exemple, ce GotW)
Maintenant, pour tous les autres types et les types de fonctions qu'il est autorisé à fournir une définition de classe, et cette restriction semble à première vue absolument artificielle et inexplicable. Venez pour penser à elle, c'est sur la deuxième et les suivantes regards :) Mais je crois que la restriction ne serait pas là s'il n'y avait pas de raison particulière pour que.
Ma question est: est-ce quelqu'un connais les raisons? Bon suppositions sont également les bienvenus.
Notes:
- MSVC ne permettent PVF pour avoir inline définitions. Donc ne soyez pas surpris :)
- le mot -
inline
dans cette question ne fait pas référence à l' inline mot-clé. Il est censé signifier lexicalement dans la classe