初始化 GTest const class 成员

Initializing GTest const class members

我想实现这样的目标:

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

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

但是回忆起 EffectiveCPP 的第 4 项,这种方式不能保证初始化,并且有可能出现未定义的行为。

假设上面是方法1.

我可以想到另外两种方法来实现这一点:

方法 2:使用 MyTest 构造函数的 myConstStr 的初始化列表。

方法 3:将其设置为 constexpr - 因为该值是在编译时设置的,所以我不应该在运行时遇到任何初始化问题。

哪种方法才是正确的处理方法?另外 Effective CPP 是一本相对较旧的书 - 第 4 项的讨论是否仍然完全适用?

Post 关于 Cpplang slack 的讨论,发现最好的解决方案是对任何 integral/Enum 类型使用 static const - 也可以使用 static constexpr 但是这个本质上是相同的,除了在 C++17 中静态 constexpr 数据成员也可以被内联。

额外有用的参考:

   const int myConstInt     = 23;

是一个非静态数据成员,带有默认成员初始值设定项 https://en.cppreference.com/w/cpp/language/data_members#Member_initialization

绝对没有未定义行为的风险。

保证初始化