我想实现以下目标:
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项的讨论是否仍然完全适用?
答案 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数据成员。