C++ 虫子还是虫子?Visual Studio 2013预览带有std::string的std::vector初始值设定项列表
最后他们做到了。MSVC12编译器现在允许统一初始化。但我发现,它的工作方式与GNU GCC 4.8.1的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)
-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