C++ 虫子还是虫子?Visual Studio 2013预览带有std::string的std::vector初始值设定项列表

C++ 虫子还是虫子?Visual Studio 2013预览带有std::string的std::vector初始值设定项列表,c++,string,c++11,vector,uniform-initialization,C++,String,C++11,Vector,Uniform Initialization,最后他们做到了。MSVC12编译器现在允许统一初始化。但我发现,它的工作方式与GNU GCC 4.8.1的-std=C++11标志不同 考虑以下代码: #include <vector> #include <string> #include <iostream> struct Data { Data(const std::string& name, int x): m_Name(name), m_X(x)

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

考虑以下代码:

#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";

}
()

MSVC12的结果:

 1
 2
 3
比如字符串还没有初始化

问题:

  • 根据C++11标准,我的代码段语法正确吗
  • GCC行为是标准的还是某种扩展
  • MSVC的行为是标准的还是一个bug

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

      这是MSVC中的一个错误。因此GCC不知何故发明了“二”和“三”,其中应该是“一”?那么MinGW中也有一只虫子。@BartekBanachewicz,拜托@如果我认为它肯定是一个bug,我肯定会这样拼写。这是一个挑战性的错误如果您真的想测试C++11的一致性,为什么不放弃
      数据(…)
      ,而选择
      {…}
      (初始化器列表)并使用ranged for循环呢?e、 g.耶!他们做到了
       1
       2
       3