до сих пор я знал что чистым виртуальным функциям не нужно тело, и обьявлять их даже с пустым телом, является ошибкой.
Мне недавно говорят обратное:
class A {
public:
~A() = 0 {}
//...
}
Что так не то что нельзя, но и нужно так обьявлять...
Вопрос
Скажите пожалуйста, зачем чистой виртуальной функции тело? Тело чего? Где смысль чистой виртуальности тогда? И в конце концов, если это правда, почему тогда мой компилятор выдает ошибку? Это что то новое после C++14?..
Вот ошибка моего компилятора:
C:\Users\Mk\Documents\H\C++\test\main.cpp:12: error: pure-specifier on function-definition virtual ~A() = 0 {}
Ответ
Формально в 10.4.2 есть замечание-
Объявление функции не может содержать одновременно чистый-спецификатор и описание функции. ■
Пример.
struct C
{
virtual void f() = 0 { }; // неправильно
};
Конец примера.
Но при этом ее можно определять:
Описывать чистую виртуальную функцию необходимо только в случае, когда она вызывается посредством синтаксиса квалифицированного-идентификатора (5.1), или похожим образом (12.4).
Т.е., похоже, что чисто виртуальная функция может быть определена, но только не в объявлении.
Комментариев нет:
Отправить комментарий