Visual Studio 2013 CTP是否支持非整数类型的类内静态const初始值设定项?

时间:2014-03-26 07:51:01

标签: c++ visual-studio c++11 visual-studio-2013

使用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的缺陷还是我做错了什么?

1 个答案:

答案 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中也允许使用。)