Чистые виртуальные функции могут не иметь встроенного определения. Почему?

Чистые виртуальные функции - это те функции-члены, которые являются виртуальными и имеют чистый спецификатор ( = 0; )

Пункт 10.4 параграфа 2 C ++ 03 сообщает нам, что такое абстрактный класс, и, в качестве примечания, следующее:

[Примечание: объявление функции не может содержать как чистый спецификатор, так и определение —Конечное примечание] [Пример:

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

—конечный пример]

Для тех, кто не очень знаком с проблемой, обратите внимание, что чистые виртуальные функции могут иметь определения , но вышеупомянутый пункт запрещает такие определения должны отображаться встроенными (лексически внутри класса). (Для определения чистых виртуальных функций вы можете увидеть, например, this GotW )

Теперь для всех других видов и типов функций разрешено предоставлять определение внутри класса, и это ограничение кажется на первый взгляд абсолютно искусственным и необъяснимым. Если подумать, это кажется таковым на второй и последующие взгляды :) Но я считаю, что ограничения не было бы, если бы для этого не было конкретной причины.

Мой вопрос: знает ли кто-нибудь те конкретные причины? Хорошие догадки также приветствуются.

Примечания:

  • MSVC позволяет PVF иметь встроенные определения. Так что не удивляйтесь :)
  • слово inline в этом вопросе не относится к ключевому слову inline . Предполагается, что это означает лексически в классе

59
задан Lightness Races with Monica 30 March 2013 в 19:04
поделиться