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

(イデオン リンク)

MSVC12 での結果:

 1
 2
 3

文字列が初期化されていないようです。

質問:

  • コード スニペットの構文は C++11 標準に従って正しいですか?
  • GCC の動作は標準ですか、それともある種の拡張機能ですか?
  • MSVC の動作は標準ですか、それともバグですか?
4

1 に答える 1

2

これは、VS2013 Preview のバグである可能性があります。現在の VS2013 RC によって生成されたバイナリの出力は、g++ と一致しています。

于 2013-09-23T14:43:54.790 に答える