Инициализация членов константного класса gtest

Я хочу добиться чего-то вроде этого:

class MyTest: public ::testing::Test {
public:
   const int myConstInt     = 23;
}

TEST_F(MyTest, MyTest1) {... use myConstInt ...}

Но если вспомнить пункт 4 EffectiveCPP, инициализация не гарантируется таким образом, и есть вероятность неопределенного поведения.

Допустим, это Способ 1.

Я могу придумать два других способа добиться этого:

Способ 2: список инициализаторов myConstStr с использованием конструктора MyTest.

Способ 3: Сделайте это constexpr - поскольку значение устанавливается во время компиляции, я не должен сталкиваться с какими-либо проблемами инициализации во время выполнения.

Что было бы правильным способом сделать это? Также «Эффективный CPP» - это относительно старая книга - применимо ли обсуждение пункта 4 в полной мере?

0
0
103
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

После обсуждения Slack Cpplang выяснилось, что лучшим решением было бы использовать static const для любых интегральных типов / типов Enum - также можно использовать static constexpr, но это по сути то же самое, за исключением C++ 17, где статические члены данных constexpr также могут быть встроены .

Дополнительная полезная ссылка: constexpr против static const: какой из них предпочесть?

Ответ принят как подходящий
   const int myConstInt     = 23;

это нестатический член данных с инициализатор члена по умолчаниюhttps://en.cppreference.com/w/cpp/language/data_members#Member_initialization

Нет абсолютно никакого риска, что это неопределенное поведение.

Инициализация гарантирована

Другие вопросы по теме