最后他们做到了。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 行为是标准行为还是错误?