使用g ++(上次我检查时使用clang ++)我可以在标题中写这个并期望它能够工作:
struct test
{
static constexpr float MEANING_OF_LIFE = 42.0f;
};
但是Visual Studio 2013 CTP需要这个(并且它在没有警告或错误的情况下编译):
struct test
{
static const float MEANING_OF_LIFE;
};
const float test::MEANING_OF_LIFE = 42.0f; // <- In the header, not a .cpp file.
这是Visual Studio的缺陷还是我做错了什么?
答案 0 :(得分:3)
第二种情况是错误的:它需要
struct test
{
static const float MEANING_OF_LIFE;
};
const float test::MEANING_OF_LIFE = 42.0f; // In an implementation file
实际定义需要在实现(.cpp)文件中,而不是在标题中,否则您将获得ODR违规。
第一种情况是有效的C ++ 11,但我猜Visual Studio还没有支持它。 (如果使用整数类型而不是float
,它可能会有效,因为在C ++ 98中也允许使用。)