==> 查看完整的代码片段和编译coliru http://coliru.stacked-crooked.com/a/e6ebe0ef8a87b601.
我有一个文字类型 http://en.cppreference.com/w/cpp/concept/LiteralType班级填充constexpr要求 http://en.cppreference.com/w/cpp/language/constexpr:
struct MyString
{
constexpr MyString(char const* p, int s) : ptr(p), sz(s) {}
constexpr char const* data() const { return ptr; }
constexpr int size() const { return sz; }
char const *ptr = 0;
int const sz = 0;
};
我用它作为constexpr static http://en.cppreference.com/w/cpp/language/static#Constant_static_members成员变量:
struct Foo
{
int size() { return str_.size(); }
constexpr static MyString str_{"ABC",3};
};
int main()
{
Foo foo;
return ! foo.size();
}
But the linker says:
(Clang-3.5 and GCC-4.9)
undefined reference to `Foo::str_'
I have to define the constexpr static
member!
(I do not specify the constructor parameters)
constexpr MyString Foo::str_;
然而,如果constexpr static
成员曾是int
该成员不必在类定义之外定义。这是我的理解,但我不确定......
问题:
- Why
int
不需要在类声明之外定义,但是MyString
需要这个吗?
- 定义一个有什么缺点吗?
constexpr static
头文件中的成员?
(我仅提供我的库作为头文件)