【问题标题】:Initializing GTest const class members初始化 GTest const 类成员
【发布时间】:2018-09-13 16:01:18
【问题描述】:

我想实现这样的目标:

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 条的讨论还完全适用吗?

【问题讨论】:

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


    【解决方案1】:
       const int myConstInt     = 23;
    

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

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

    保证初始化

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-16
        • 1970-01-01
        相关资源
        最近更新 更多