Если это вопрос C ++ и в качестве альтернативы упоминается #define
, то речь идет о «глобальных» (т. Е. File-scope) константах, а не о членах класса. Когда дело доходит до таких констант в C ++ static const
является избыточным. В C ++ const
по умолчанию есть внутренние связи, и нет смысла объявлять их static
. Так что это действительно около const
против #define
.
И, наконец, в C ++ const
предпочтительнее. Хотя бы потому, что такие константы типизированы и ограничены. Нет никаких причин предпочитать #define
над const
, за исключением нескольких исключений.
Строковые константы, кстати, являются одним из примеров такого исключения. С #define
d строковыми константами можно использовать функцию конкатенации во время компиляции компиляторов C / C ++, как в
#define OUT_NAME "output"
#define LOG_EXT ".log"
#define TEXT_EXT ".txt"
const char *const log_file_name = OUT_NAME LOG_EXT;
const char *const text_file_name = OUT_NAME TEXT_EXT;
P.S. Опять же, на всякий случай, когда кто-то упоминает static const
как альтернативу #define
, это обычно означает, что они говорят о C, а не о C ++. Интересно, правильно ли помечен этот вопрос ...