Как мне лучше научиться «не платить за то, что вы не используете»?

Я только что получил ответы на этот вопрос что в итоге говорит мне: «Делать Х не имеет смысла, так как это заставит вас платить за вещи, которые вы не можете использовать».

Мне трудно следовать этому принципу; мои инстинкты больше склоняются к тому, чтобы видеть то, что я считаю чистой семантикой, с вещами, определенными «на своем месте». В более общем плане, мне не сразу понять, что скрытые расходы и секретные тарифы будет для конкретного выбора дизайна?

Это покрыто (не справочными) книгами на C ++? Есть ли где-нибудь подходящее место в Интернете, чтобы лучше понять себя, следуя этому принципу?

2

Решение

В случае, если вы представляете, это не такое общее утверждение, как кажется.

Делать Х не имеет смысла, так как это заставит вас платить за вещи, которые вы
может не использовать.

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

Виртуальные функции часто могут быть переработаны с помощью шаблонов и регулярных вызовов функций. Один стандартный пример std::vector, Например, в Java Vector реализует интерфейсы, которые можно использовать в алгоритмах. Осуществляется виртуальными вызовами функций. std::vector использует итераторы.

1

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

Несмотря на то, что вопрос слишком широкий и требует сторонних материалов, я думаю, что он достаточно интересен, чтобы заслужить ответ. Помните, что C ++ изначально был просто «C с классами», и сегодня все еще возможно написать то, что в основном является кодом C, без использования каких-либо приятных абстракций, которые дает вам C ++. Например, если вы не хотите, чтобы стоимость использования исключений, то не используйте их, если вы не хотите, чтобы стоимость RTTI (виртуальные функции), то не используйте их, если вы не хотите накладные расходы на используя шаблоны … и т. д.

Что касается ресурсов, я собираюсь нарушать правила и рекомендовать Шаблоны программирования игр который, несмотря на название, является хорошим руководством общего назначения для написания перформанта C ++.

0

Как мне лучше научиться «не платить за то, что вы не используете»?

Ключ к тому, чтобы «не платить за то, что вы не используете» — это абстракции. Когда вы четко понимаете назначение класса или функции, вы добавляете данные и аргументы, которые абсолютно необходимы для правильной работы класса и функции, с минимальными накладными расходами.

Вы должны быть очень бдительными в отношении добавления переменных-членов, функций-членов (как виртуальных, так и не виртуальных) к классу. Каждая переменная-член добавляет к памяти требования класса. Каждая функция члена требует обслуживания. Наличие виртуальных функций-членов увеличивает требования к памяти класса, а также небольшое наказание во время выполнения.

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

0
По вопросам рекламы [email protected]