2015-02-03 4 views
1

Я только что получил ответы на this question, которые в нижней строке скажут мне: «Выполнение X не имеет смысла, поскольку это заставляет вас платить за то, что вы не можете использовать».Как я могу лучше научиться «не платить за то, что вы не используете»?

Я нахожу эту задачу трудной для подражания; мои инстинкты больше ориентируются на то, что я считаю понятной семантикой, с вещами, определенными «на их месте». В более общем плане, мне не сразу понять, что будет для конкретного дизайна? hidden costs and secret tariffs.

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

+2

«Не платите за то, что вы не используете» - это философия дизайна языка C++ и стандартной библиотеки. Ваши программы на C++ не обязаны следовать той же философии. – Oktalist

ответ

0

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

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

0

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

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

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

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

+0

Но что, если: 1.Вам нужно согнуть смысл или цель, чтобы заплатить меньше? Или 2. Вы разрабатываете программный компонент и должны назначать эти значения или цели? – einpoklum

+0

@einpoklum, трудно ответить на это без конкретных примеров и их использования. –

+0

Я ищу что-то вроде описания конкретных примеров, открывающих глаза для изучения. На иврите это называется «пытаться побрить чужую бороду». – einpoklum

1

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

Выполнение X не имеет смысла, поскольку оно заставляет вас платить за то, что вы, , не могли бы использовать.

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

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