来自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中定义?
答案 0 :(得分:1)
在C ++ 11和C ++ 14中,如果是odr-used,则需要单独定义foo
,即使在constexpr
的情况下也是如此。但是对于constexpr
案例,单独定义will not be required anymore in C++17。