Рекомендации для программистов на С (ранее) - теперь же решивших также освоить си+

Чем лучше вы знаете С, тем труднее вам будет избежать программирования на С++ в
стиле С, теряя при этом потенциальные преимущества C++. Просмотрите, пожалуй-
ста, приложение Б, в котором описываются различия С и C++. Вот некоторые вещи,
с которыми С++ справляется лучше, чем С:
[ 1] Макросы почти никогда не требуются в С++. Пользуйтесь const (§ 5.4) или епит
{§ 4.8) для определения констант, inline (§ 7.1.1) во избежание накладных расхо-
дов на вызов функций, template (глава 13) для определения семейства функций
или типов и namespace (§ 8.2) для предотвращения конфликтов имен.

[2] Не объявляйте переменную, пока она вам не потребуется, чтобы вы тут же могли
инициализировать ее. Объявление можно поместить в любом месте, где допустима инструкция (§ 6.3.1),
в разделе инициализации for-инструкции (§ 6.3.3) и в
условиях (§ 6.3.2.1).

[3] Не используйте malloc[). Оператор new (§ 6.2.6) делает то же самое лучше. Вме-
сто realloc[) пользуйтесь vector (§ 3.8).

[4] Пытайтесь избегать void*, арифметических операций над указателями, объе-
динений и приведений типов, за исключением разве что глубоко спрятанных в
реализацию функций или классов. В большинстве случаев приведение типа оз-
начает ошибку на этапе проектирования. Если вам необходимо приведение, по-
пробуйте воспользоваться одним из «новых преобразований типа» (§ 6.2.7), ко-
торое позволит выразить более точно то, что вы пытаетесь сделать.

[5J Сведите к минимуму использование массивов символов и строк С. Стандартные
библиотеки классов C++ string (§ 3.5) и vector (§ 3.7.1) часто могут упростить
программирование по сравнению с традиционным стилем С. В общем, не пытай-
тесь создавать то, что уже сделано в стандартной библиотеке.

Для обеспечения соглашений С о компоновке функция C++ должна быть объявлена
соответствующим образом (§ 9.2.4).

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