错误与否? Visual Studio 2013使用std :: string预览std :: vector初始化列表

时间:2013-07-09 12:14:38

标签: c++ string c++11 vector uniform-initialization

最后他们做到了。 MSVC12编译器现在允许统一初始化。但我发现,它的工作方式与带有-std=C++11标志的GNU GCC 4.8.1不同。

考虑以下代码:

#include <vector>
#include <string>
#include <iostream>

struct Data
{
    Data(const std::string& name, int x):
        m_Name(name),
        m_X(x)
    {}

    std::string m_Name;
    int m_X;
};

std::vector<Data> datas = 
{
    Data("one", 1),
    Data("two", 2),
    Data("three", 3),
};

int main()
{
    for(auto it = datas.begin(); it != datas.end(); ++it)
        std::cout << it->m_Name << " "  << it->m_X << "\n";

}

GCC的结果(如预期的那样):

one 1
two 2
three 3

ideone link

MSVC12的结果:

 1
 2
 3

类似字符串尚未初始化。

问题:

  • 根据C ++ 11标准,我的代码片段语法是否正确?
  • GCC的行为是标准的还是某种延伸?
  • MSVC行为是标准行为还是错误?

1 个答案:

答案 0 :(得分:2)

这可能是VS2013预览中的一个错误。当前VS2013 RC生成的二进制输出与g ++一致。