Наконец они сделали это. Компилятор MSVC12 теперь позволяет выполнять равномерную инициализацию. Но я обнаружил, что он работает иначе, чем GNU GCC 4.8.1 с флагом -std=C++11
.Ошибка или нет? Visual Studio 2013 Предварительный просмотр std :: вектор инициализатор список с std :: строка
Рассмотрим этот код:
#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
как струны hasn инициализирован.
Вопросы:
- ли мой синтаксис фрагмент кода правильно в соответствии с C++ 11 стандарта?
- Является ли поведение GCC стандартным или является его расширением?
- Поведение MSVC стандартно или это ошибка?
Это ошибка в MSVC. –
Определенно ошибка. –
Вы уверены, что вы публикуете правильный результат? Версия GCC выглядит довольно подозрительно. – juanchopanza