const — применяются ли ковариантные cv-квалификаторы к примитивным типам в C ++?

В C ++ допустимо уменьшить квалификатор cv возвращаемого типа в производном классе:

class Base {
virtual const Base* f();
};

class Derived : public Base {
Base* f() override;
};

Это действительно с указателями на примитивные типы?

class Base {
virtual const int* f();
};

class Derived : public Base {
int* f() override;
};

7

Решение

Применяются ли ковариантные cv-квалификаторы к примитивным типам в C ++?

НЕТ

§ 10.3.7 Виртуальные функции

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

  • оба являются указателями на классы, оба являются lvalue ссылками на
    классы, или оба являются rvalue ссылками на классы
  • класс в возвращаемом типе B::f тот же класс, что и класс
    в возвращаемом типе D::f, или является однозначным и доступным
    прямой или косвенный базовый класс класса в типе возврата D::f
  • оба указателя или ссылки имеют одинаковую квалификацию cv и
    тип класса в возвращаемом типе D::f
6

Другие решения

Других решений пока нет …