3

最后他们做到了。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链接

MSVC12 的结果:

 1
 2
 3

像字符串还没有被初始化。

问题:

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

1 回答 1

2

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

于 2013-09-23T14:43:54.790 回答