错误与否? 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的主要内容,如果未能解决你的问题,请参考以下文章

TF10121 错误 Visual Studio 2013

Visual Studio 2013 中的 FTP 发布错误

Qt 4.8,Visual Studio 2013 编译错误

Visual Studio 2013 中的 LoadTestException 错误

Microsoft Visual Studio 2013 链接错误 1104

在 Visual Studio 2013 中运行程序时出现错误