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

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

最佳答案

第二种情况是错误的:它需要是

struct test
{
    static const float MEANING_OF_LIFE;
};

const float test::MEANING_OF_LIFE = 42.0f; // In an implementation file

实际定义需要放在实现 (.cpp) 文件中,而不是放在 header 中,否则您将违反 ODR。

第一种情况是有效的 C++11,但我猜 Visual Studio 还不支持它。 (如果您使用整数类型而不是 float,它可能会起作用,因为 C++98 也允许这样做。)

关于c++ - Visual Studio 2013 CTP 是否支持非整数类型的类内静态常量初始值设定项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22654603/

相关文章:

c++ - 构造Hash Table时特定数字导致的段错误

c++ - 为什么 std::function 不是有效的模板参数,而函数指针是?

c# - 通过单击 WinForms 中的按钮在面板上绘图

c++ - 非标准基础中的算术

C++转义控制字符

c++ - "memory corruption"当遵循物理教程 : how to fix? 时

c++ - 如何将带有 ID 号的名称列表读入 map C++

c++ - 灵活的数组作为类成员

visual-studio - SVN:同事将一个文件夹检入到存储库中,但是我无法将其更新到该版本

java - 是否可以将 Visual Studio 用作 Google Web Toolkit 的 IDE?