google-test和static constexpr成员

时间:2017-03-13 12:33:24

标签: c++ googletest

来自FAQ

如果您的班级有静态数据成员:

// foo.h

class Foo {
    ...
    static const int kBar = 100;
};

您还需要在foo.cc中的类主体之外定义它:

const int Foo::kBar; // No initializer here.

否则您的代码无效的C ++ ,并且可能会以意想不到的方式中断。特别是,在Google Test中使用它比较断言(EXPECT_EQ等)将生成“未定义的引用”链接器错误。

如果我使用static const代替static constexpr,我是否还应该在foo.cc中定义?

1 个答案:

答案 0 :(得分:1)

在C ++ 11和C ++ 14中,如果是odr-used,则需要单独定义foo,即使在constexpr的情况下也是如此。但是对于constexpr案例,单独定义will not be required anymore in C++17