Никто не должен!
На самом деле, следует предпочесть const int sum = 1;
над #define sum 1
по ряду причин:
Механизм на основе области действия:
#define
s не учитывают области, поэтому нет способа создать пространство имен в области класса. В то время как переменные const могут быть определены в классах.
Как избежать странных магических чисел во время ошибок компиляции:
Если вы используете #define
, то они заменяются препроцессором во время предварительной компиляции. Так что, если вы получите ошибку во время компиляции, это будет сбивать с толку, потому что сообщение об ошибке не будет ссылаться на имя макроса, но на значение и будет появиться внезапное значение, и можно было бы потратить много времени на его отслеживание в коде.
Простота отладки:
Также по тем же причинам, указанным в # 2, при отладке #define
действительно не поможет.
Таким образом, чтобы избежать вышеуказанных ситуаций, const
будет лучшим выбором.