Подтвердить что ты не робот

Как включить функции С++ 0x в Visual Studio? [Поддержка списков инициализаторов]

У меня был код, который я разработал на Ubuntu, и теперь я пытаюсь его скомпилировать в Windows 7 (MS VS 2010).

vector<float> tmp;
....
tmp = {3.0,4.5,9.4};

Это дает мне синтаксическую ошибку

error C2143: syntax error : missing ';' before '{'

Это потому, что Visual Studio не поддерживает эту функцию? или мне нужно включить некоторый переключатель в свойствах. У меня есть свойство "Platform Toolset", установленное на "v100."

Спасибо.

4b9b3361

Ответ 1

Функции С++ 0x включены по умолчанию в компиляторе Visual Studio 2010 С++. Для использования lambdas, auto и т.д. Не требуется никаких дополнительных переключателей. Если вы получаете эту ошибку, потому что, во всяком случае, это не поддерживается.

ИЗМЕНИТЬ

На основе этой статьи MSDN списки инициализаторов не являются одной из 6 поддерживаемых функций в 2010 году.

Компилятор Visual С++ в Visual Studio 2010 включает шесть основных функций языка С++ 0x: лямбда-выражения, ключевое слово auto, ссылки rvalue, static_assert, nullptr и decltype

Ответ 2

Visual Studio 2010 не поддерживает списки инициализаторов. Посмотрите здесь для поддерживаемых функций С++ 0x в Visual Studio 2010

Visual Studio 2012 также не поддерживает их. Вы можете найти его функции С++ 11, которые реализованы в Visual Studio 2012/VS11 здесь и здесь.

Первая реализация списка инициализаторов доступна в Visual С++ Compiler November 2012 CTP.

Первый релиз списков инициализаторов будет в Visual Studio 2013.

Ответ 3

Даже если бы они были там, этот код не работал бы, потому что он назначает список инициализаторов, который еще не является вектором, к существующему объекту с именем 'tmp'. Вы можете назначить векторам следующим образом:

vector<int> tmp = vector<int> {...}; // calls constructor, initializes then assigns

или

std::initializer_list<int> iniList = {1,2,3,4,5,6};

но не

std::vector<int> tmp;
tmp = {...}; // calls assignment operator

Кстати: функция все еще отсутствует в VS2012.