Чем C++ управляет в отношении ковариантных типов возврата?

APC является насущной необходимостью. Мало того, что это делает для большой системы кэширования, но усиление из автокэшируемых файлов PHP является удачей. Что касается нескольких идея базы данных, я не думаю, что Вы вытащили бы много из наличия различных баз данных по тому же серверу. Это может дать Вам что-то вроде усиления в скорости в течение времени запроса, но я сомневаюсь относительно усилий, которые это приложило бы, чтобы развернуть и поддержать код для всех трех при проверке, что они находятся в синхронизации, стоило бы того.

я также настоятельно рекомендую выполнение Xdebug для нахождения узких мест в программе. Это сделало оптимизацию бризом для меня.

5
задан vehomzzz 6 November 2009 в 19:50
поделиться

2 ответа

C ++ Standard 2003. 10.3.5

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

- оба являются указателями на классы или ссылки на классы

- класс в возвращаемом типе B :: f - это тот же класс, что и класс в тип возврата D :: f, или - это однозначный и доступный прямой или косвенный базовый класс класса в тип возвращаемого значения D :: f

- и указатели, и ссылки имеют такое же резюме и тип класса в возвращаемом типе D :: f имеет такое же резюме, что и или меньше резюме, чем класс введите тип возвращаемого значения B :: f.

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

Пример:

class B {};
class D : private B { friend class Derived; };
struct Base {
  virtual B*  vf4();
  virtual B*  vf5();
};
class A;
struct Derived : public Base {
  D* vf4();  // OK: returns pointer to derived class
  A* vf5();  // error: returns pointer to incomplete class
};
10
ответ дан 18 December 2019 в 13:15
поделиться

Pff, слишком длинные стандартные кавычки.

Вы можете использовать другой тип как ковариантный, если (a) это указатель / ссылка (b) его можно привести к предыдущему типу возврата простое добавление константы, известной во время компиляции (c), она соответствует всем квалификаторам с постоянным изменением.

4
ответ дан 18 December 2019 в 13:15
поделиться
Другие вопросы по тегам:

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