Как мне лучше научиться "не платить за то, что вы не используете"?
Я только что получил ответы на этот вопрос, который в итоге говорит мне: "Делать Х не имеет смысла, так как это заставит вас платить за вещи, которые вы не можете использовать".
Мне трудно следовать этому принципу; мои инстинкты больше склоняются к тому, чтобы видеть то, что я считаю чистой семантикой, с вещами, определенными "на своем месте". В целом, мне не сразу понять, какие скрытые затраты и секретные тарифы будут для конкретного выбора дизайна?.
Это покрыто (не справочными) книгами на C++? Есть ли какое-то место в Интернете, чтобы лучше понять себя, следуя этому принципу?
3 ответа
В случае, когда вы представляете, это не такое общее утверждение, как кажется.
Делать Х не имеет смысла, так как это заставит вас платить за вещи, которые вы не можете использовать.
Это просто утверждение, что, если вы можете, избегайте использования виртуальных функций. Они добавляют накладные расходы к вызову функции.
Виртуальные функции часто могут быть переработаны с помощью шаблонов и регулярных вызовов функций. Один стандартный пример std::vector
, Например, в Java Vector реализует интерфейсы, которые можно использовать в алгоритмах. Осуществляется виртуальными вызовами функций. std::vector
использует итераторы.
Несмотря на то, что вопрос слишком широкий и требует сторонних материалов, я думаю, что он достаточно интересен, чтобы заслужить ответ. Помните, что C++ изначально был просто "C с классами", и сегодня все еще возможно написать то, что в основном является кодом C, без использования каких-либо приятных абстракций, которые дает вам C++. Например, если вы не хотите, чтобы стоимость использования исключений, то не используйте их, если вы не хотите, чтобы стоимость RTTI (виртуальные функции), то не используйте их, если вы не хотите накладные расходы на используя шаблоны... и т. д.
Что касается ресурсов, я собираюсь нарушить правила и порекомендовать шаблоны программирования игр, которые, несмотря на название, являются хорошим руководством общего назначения для написания языка программирования C++.
Как мне лучше научиться "не платить за то, что вы не используете"?
Ключ к тому, чтобы "не платить за то, что вы не используете" - это абстракции. Когда вы четко понимаете назначение класса или функции, вы добавляете данные и аргументы, которые абсолютно необходимы для правильной работы класса и функции, с минимальными накладными расходами, насколько это возможно.
Вы должны быть очень бдительными в отношении добавления переменных-членов, функций-членов (как виртуальных, так и не виртуальных) в класс. Каждая переменная-член добавляет к памяти требования класса. Каждая функция члена требует обслуживания. Наличие виртуальных функций-членов увеличивает требования к памяти класса, а также небольшое наказание во время выполнения.
Вы должны быть очень бдительными в отношении аргументов функции. Вы не хотите, чтобы пользователь был обременен предоставлением аргументов, которые не имеют смысла. Вы также не хотите пропускать какие-либо аргументы, делая скрытые предположения.