Я недавно сталкивался с этой идиомой программирования:
const float Zero = 0.0;
который затем используется в сравнениях:
if (x > Zero) {..}
Может ли кто-нибудь объяснить, действительно ли это более эффективно, доступно для чтения или сопровождения, чем:
if (x > 0.0) {..}
ПРИМЕЧАНИЕ: я могу подумать о других причинах для определения этой константы, мне просто интересно, как ее использовать в этом контексте.
xимеет тип float, то x > 0.0форсирует повышение double, которое может быть менее эффективным. Это не очень хорошая причина для использования именованной константы, просто для того, чтобы убедиться, что ваши константы имеют правильный тип (например 0f, float(0)или decltype(x)(0)).
13.37это не floatтак double. Так что, если вы хотели, floatто вполне возможно, что ваш репетитор был прав. В некоторых контекстах (например, присвоение float) 13.37будет неявно преобразовано в то, floatчто вы хотели, а в других контекстах (например, вывод типа шаблона) это не будет, тогда как static const floatвсегда начинается с того типа, который вы намеревались. Следовательно, более безопасный тип. Имейте в виду, так будет 13.37f! Однако есть и другие причины избегать макроса, кроме «безопасности типов», так что вполне вероятно, что преподаватель дал вам плохой аргумент.