Le funzioni virtuali pure potrebbero non avere una definizione in linea. Perché?

Le funzioni virtuali pure sono quelle funzioni membro che sono virtuali e hanno lo specificatore puro ( = 0; )

La clausola 10.4 paragrafo 2 di C ++ 03 ci dice che cos’è una class astratta e, come nota a margine, quanto segue:

[Nota: una dichiarazione di funzione non può fornire sia una specificazione pura che una definizione -end note] [Esempio:

 struct C { virtual void f() = 0 { }; // ill-formsd }; 

-End esempio]

Per coloro che non hanno molta familiarità con il problema, si noti che le funzioni virtuali pure possono avere definizioni ma la clausola sopra menzionata proibisce che tali definizioni appaiano in linea (lessicamente in class). (Per gli usi della definizione di funzioni virtuali pure si può vedere, per esempio, questo GotW )

    Ora per tutti gli altri tipi e tipi di funzioni è permesso fornire una definizione in-class, e questa restrizione sembra a prima vista assolutamente artificiale e inesplicabile. Vieni a pensarci, sembra tale al secondo e ai successivi sguardi 🙂 Ma credo che la restrizione non ci sarebbe se non ci fosse una ragione specifica per quello.

    La mia domanda è: qualcuno conosce queste ragioni specifiche? Buone ipotesi sono anche benvenute.

    Gli appunti:

    • MSVC consente ai PVF di avere definizioni inline. Quindi non essere sorpreso 🙂
    • la parola inline in questa domanda non si riferisce alla parola chiave inline . Dovrebbe significare lessicamente in class