错误与否? Visual Studio 2013 预览 std::vector 初始化列表与 std::string
Posted
技术标签:
【中文标题】错误与否? Visual Studio 2013 预览 std::vector 初始化列表与 std::string【英文标题】:Bug or not? Visual Studio 2013 preview std::vector initializer list with std::string 【发布时间】:2013-07-09 12:14:38 【问题描述】:他们终于做到了。 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
like 字符串尚未初始化。
问题:
根据 C++11 标准,我的代码 sn-p 语法是否正确? GCC 行为是标准行为还是某种扩展? MSVC 行为是标准行为还是错误?【问题讨论】:
这是 MSVC 中的一个错误。 所以 GCC 以某种方式发明了“二”和“三”,应该是“一”?那么MinGW中也有一个bug。 @BartekBanachewicz "definitely",拜托! @gx_ 如果我认为这绝对是一个错误,我肯定会这样拼写。这是一个挑衅的错误。 :) 如果您真的想测试 C++11 的一致性,为什么不放弃Data(...)
以支持 ...
(初始化列表)并使用 ranged-for 循环?例如like this
【参考方案1】:
这可能是 VS2013 Preview 中的一个错误。当前VS2013 RC生成的二进制输出与g++一致。
【讨论】:
耶!他们做到了! =))以上是关于错误与否? Visual Studio 2013 预览 std::vector 初始化列表与 std::string的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2013 中的 FTP 发布错误
Qt 4.8,Visual Studio 2013 编译错误
Visual Studio 2013 中的 LoadTestException 错误