я наткнулся на код, как это от программиста я очень уважаю:Преимущество замены статических членов константные статические функции-члены
class BigClass {
using MyId = uint32_t;
static constexpr MyId INVALID_ID() { return std::numeric_limits<MyId>::max();};
class SmallClass {
/* Constructor, etc. */
MyId id = INVALID_ID(); /* Default value */
};
};
Есть ли очевидное преимущество для определения INVALID_ID() как функцию вместо того, чтобы как статическая переменная const?
Вопрос static constexpr variable vs function - это точно тот же вопрос, который у меня был (в качестве примера я использовал uint32_t
), но я также задаю вопрос для других типов). Однако я не удовлетворен ответом на этот вопрос. Прочитав некоторые из ответов здесь, я считаю, что есть больше преимуществ для использования функций, чем возможность легко шаблонов.
Ну, так как это не статическая переменная-член, ее не нужно определять вне класса. – NathanOliver
Статические константы @ NathanOliver IIRC не нуждаются в определении до тех пор, пока они не используются ODR. – Quentin
@Quentin Typo фиксированный. Они могут использовать его в этом контексте. – NathanOliver