Информация об изменениях

Сообщение Re[3]: constexpr от 15.01.2023 12:34

Изменено 15.01.2023 12:58 rg45

Re[3]: constexpr
Здравствуйте, LuciferSaratov, Вы писали:

R>>А вот тебе про #define: 16. Избегайте макросов


LS>объясните мне, пожалуйста, почему следует избегать макросов?

LS>доводы из статьи по ссылке я встречал много раз.
LS>меня они не убеждают и входят в противоречие с моим личным опытом.
LS>я не претендую на звание эксперта по С++, но в своей работе я много работаю с кодом на этом языке.
LS>специфика такая, что мне приходится работать со старым (10+ лет) и очень старым (20+ лет) кодом разного качества.

"Избегайте" не означает "полностью исключите". "Избегайте" означает, не употребляйте там, где без этого легко можно обойтись. Почему так — в статье написано достаточно хорошо, по-моему. Макросы не подчиняются правилам областей видимости, на функциональные макросы не распространяется ADL и пр. Если статья не убеждает, то у меня тоже вряд ли получится.

Есть такие случаи, когда без макросов просто никак, например, описание разного рода типов со статической структурой. Использование макросов может придать таким описаниям очень приятный декларативный вид, легко изменяемый и расширяемый и избавить от написания громадного количества сопровождающего кода, такого как загрузка-выгрузка, сериализация-десериализация, операции разные — сравнения, сложения, вычитания, вывода в поток и пр. Но это же не значит, что нужно начать использовать макросы вместо констант и функций.
Re[3]: constexpr
Здравствуйте, LuciferSaratov, Вы писали:

R>>А вот тебе про #define: 16. Избегайте макросов


LS>объясните мне, пожалуйста, почему следует избегать макросов?

LS>доводы из статьи по ссылке я встречал много раз.
LS>меня они не убеждают и входят в противоречие с моим личным опытом.
LS>я не претендую на звание эксперта по С++, но в своей работе я много работаю с кодом на этом языке.
LS>специфика такая, что мне приходится работать со старым (10+ лет) и очень старым (20+ лет) кодом разного качества.

"Избегайте" не означает "полностью исключите". "Избегайте" означает, не употребляйте там, где без этого легко можно обойтись. Почему так — в статье написано достаточно хорошо, по-моему. Макросы не подчиняются правилам областей видимости, на функциональные макросы не распространяется ADL и пр. Если статья не убеждает, то у меня тоже вряд ли получится.

Есть такие случаи, когда без макросов просто никак, например, описание разного рода типов со статической структурой. Использование макросов может придать таким описаниям очень приятный декларативный вид, легко изменяемый и расширяемый и избавить от написания громадного количества сопровождающего кода, такого как загрузка-выгрузка, сериализация-десериализация, операции разные — сравнения, сложения, вычитания, вывода в поток и пр. Но это же не значит, что нужно начать повсеместно использовать макросы вместо констант и функций.