Аргумент коллеги состоит в том, что каждая единица перевода, включая этот заголовочный файл, будет иметь копию.
Вы, коллега, технически правы.Но это не имеет значения, так как избыточные копии выбрасываются, когда блоки связаны друг с другом.
Хотя я видел комментарии о том, что это не всегда так в некоторых нестандартных системах, когдазадействовано динамическое связывание.
constexpr const char* TIME_FORMAT = "yyyy-MM-dd hh:mm:ss";
.... sizeof(TIME_FORMAT)
Это не то, что вы, вероятно, думаете.Он дает вам размер указателя, а не размер указанной строки.
constexpr const int TIME_FORMAT_SIZE = strlen(TIME_FORMAT) + 1;
Ваша попытка исправления также не работает, поскольку strlen
не является константным выражением.
Вы можете исправить проблемы, используя ссылку на строковый литерал:
static constexpr auto& TIME_FORMAT = "yyyy-MM-dd hh:mm:ss";
constexpr const int TIME_FORMAT_SIZE = sizeof(TIME_FORMAT);