初始化GTest const类成员

时间:2018-09-13 16:01:19

标签: c++11 c++14 googletest

我想实现以下目标:

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

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

但是从EffectiveCPP的第4项中回想起来,不能以这种方式保证初始化,并且可能会出现不确定的行为。

让我们说以上是方法1

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

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

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

哪个是解决此问题的正确方法?有效的CPP也是一本比较古老的书-关于第4项的讨论是否仍然完全适用?

2 个答案:

答案 0 :(得分:1)

   const int myConstInt     = 23;

是具有默认成员初始化程序非静态数据成员 https://en.cppreference.com/w/cpp/language/data_members#Member_initialization

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

保证初始化

答案 1 :(得分:0)

关于Cpplang松弛的讨论之后,发现最好的解决方案是对任何整数/枚举类型使用static const-也可以使用static constexpr,但是除了在C +中,这基本上是相同的+17,其中也可以内联静态constexpr数据成员。

其他有用的参考:constexpr vs. static const: Which one to prefer?