Применяются ли ковариантные 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 голосов | спросил Brice M. Dempsey 19 MarpmWed, 19 Mar 2014 14:19:54 +04002014-03-19T14:19:54+04:0002 2014, 14:19:54

1 ответ


0

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

НЕТ

  

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

     

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

     
  • оба являются указателями на классы, оба являются ссылками на lvalue   классы, или оба являются rvalue ссылками на классы
  •   
  • класс в типе возврата B::f является тем же классом, что и класс   в типе возвращаемого значения D::f или является однозначным и доступным   прямой или косвенный базовый класс класса в типе возврата D::f
  •   
  • оба указателя или ссылки имеют одинаковую квалификацию cv и   тип класса в возвращаемом типе D::f
  •   
ответил billz 19 MarpmWed, 19 Mar 2014 14:24:17 +04002014-03-19T14:24:17+04:0002 2014, 14:24:17

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132