Я недавно сталкивался с этой идиомой программирования:
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
! Однако есть и другие причины избегать макроса, кроме «безопасности типов», так что вполне вероятно, что преподаватель дал вам плохой аргумент.