Первая версия возможна только с c++17
.Это работает, потому что все статические переменные-члены, объявленные constexpr
, неявно inline .
Допускается несколько определений (в отдельных единицах компиляции), но при связывании их будет только 1. Итак, вы предполагаете, чтоон распределяется один раз в каждом .cpp
файле. Это неверно.
Какой из них предпочтительнее, может зависеть.Я бы выбрал первый вариант, если бы знал, что никогда не буду его менять, или очень редко.
Если мне потребуется изменить его, это может привести к тому, что все файлы .cpp
, которые #include
будут иметьперекомпилировать, и тогда было бы лучше выделить его в файл .cpp
.