Чистые виртуальные функции - это те функции-члены, которые являются виртуальными и имеют чисто-спецификатор (= 0;
)
Пункт 10.4 параграфа 2 из С++ 03 говорит нам, что такое абстрактный класс, и в качестве примечания стороны:
[Примечание: объявление функции не может предоставить как чисто-спецификатор, так и определение -end note] [Пример:
struct C {
virtual void f() = 0 { }; // ill-formed
};
-end пример]
Для тех, кто не очень хорошо разбирается в этой проблеме, обратите внимание, что чистые виртуальные функции могут иметь определения, но упомянутое выше положение запрещает такие определения появляться в строке (лексически в классе). (Для целей использования чистых виртуальных функций вы можете увидеть, например, этот GotW)
Теперь для всех других видов и типов функций разрешено предоставлять определение в классе, и это ограничение кажется на первый взгляд абсолютно искусственным и необъяснимым. Подумайте об этом, кажется, это на втором и последующих взглядах:) Но я считаю, что ограничение не было бы там, если бы для этого не было конкретной причины.
Мой вопрос: кто-нибудь знает эти конкретные причины? Хорошие догадки также приветствуются.
Примечания:
- MSVC позволяет PVF иметь встроенные определения. Так что не удивляйтесь:)
- слово
inline
в этом вопросе не относится к ключевому слову inline. Предполагается, что это означает лексически в классе