Поделиться через


Новые возможности Visual C++ в Visual Studio 2013

В этом документе перечислены новые и усовершенствованные возможности в Visual C++ в Visual Studio 2013.

Сведения о других дополнениях в Visual Studio 2013 см. в разделе Новые возможности Visual Studio 2013.

Улучшенная поддержка стандартов ISO C/C++

Компилятор

  • Поддерживаются следующие функции языка C++11 стандарта ISO:

  • Поддерживаются следующие функции языка C99 стандарта ISO:

    • _Bool

    • Составные литералы.

    • Назначенные инициализаторы.

    • Совместное использование объявлений с кодом.

  • Преобразование строковых литералов в изменяемые значения может быть отключено с помощью нового параметра компилятора /Zc:strictStrings.В C++98 преобразование строковых литералов в значения char * (и расширенных строковых литералов в значения wchar_t *) стало нерекомендуемым.В C++11 это преобразование было полностью удалено.Хотя компилятор мог бы строго соответствовать стандарту, вместо этого он предоставляет параметр /Zc:strictStrings, чтобы предоставить возможность управления преобразованием.По умолчанию этот параметр отключен.Обратите внимание, что при использовании этого параметра в режиме отладки библиотека STL не будет компилироваться.

  • Приведение ссылок rvalue и lvalue. С помощью ссылок rvalue C++11 может четко различать значения lvalue и rvalue.Ранее компилятор Visual C++ не предоставлял эту возможность в определенных сценариях приведения.Для обеспечения соответствия компилятора рабочей документации языка C++(см. раздел 5.4, [expr.cast]/1) добавлен новый параметр компилятора /Zc:rvalueCast.

    Если этот параметр не задан, поведение по умолчанию является таким же, как в Visual Studio 2012.

ПримечаниеПримечание

* Для заданных по умолчанию функций использование =default для запроса почленных конструкторов перемещения и операторов присваивания с перемещением не поддерживается.

Библиотеки C99

Добавлены объявления и реализации для отсутствующих функций в следующих заголовках: math.h, ctype.h, wctype.h, stdio.h, stdlib.h и wchar.h.Кроме того, добавлены новые заголовки complex.h, stdbool.h, fenv.h и inttypes.h, а также реализации для всех объявленных в них функций.Добавлены новые заголовки-оболочки C++ (ccomplex, cfenv, cinttypes, ctgmath) и обновлен ряд других заголовков (ccomplex, cctype, clocale, cmath, cstdint, cstdio, cstring, cwchar и cwctype).Дополнительные сведения см. в статье Библиотечная поддержка C99 в Visual Studio 2013.

Библиотека стандартных шаблонов

  • Поддержка операторов явного преобразования, списков инициализаторов, ограниченных перечислений и шаблонов с переменным числом аргументов C++11.

  • Все контейнеры теперь поддерживают детализированные требования к элементам C++11.

  • Поддержка следующих функций C++14:

    • "Прозрачные функторы операторов" less<>, greater<>, plus<>, multiplies<> и т. д.

    • make_unique<T>(args...) и make_unique<T[]>(n).

    • Функции, не являющиеся членами — cbegin()/cend(), rbegin()/rend() и crbegin()/crend().

  • В <atomic> внесено множество усовершенствований, направленных на повышение производительности.

  • В <type_traits> внесены серьезные усовершенствования, направленные на стабилизацию и устранение ошибок кода.

Критические изменения

Расширенная поддержка стандартов ISO C/C++ может потребовать внесения изменений в существующий код для его соответствия C++11 и правильной компиляции в Visual C++ в Visual Studio 2013.Дополнительные сведения см. в разделе Критические изменения в Visual C++.

Дополнительные сведения о новом языке C++11/14 и возможностях STL см. в разделах Поддержка функций C++11 (современный C++) и Возможности, исправления и критические изменения в C++11/14 STL в Visual Studio 2013

Усовершенствования библиотек Visual C++

  • Добавлен пакет C++ REST SDK.В него включена современная реализация C++ для служб REST.Дополнительные сведения см. на веб-сайте C++ REST SDK.

  • Усовершенствована поддержка текстур C++ AMP.Теперь она включает поддержку MIP-карт и новых режимов выборки.

  • Задачи PPL поддерживают несколько технологий планирования и асинхронную отладку.Новые API-интерфейсы позволяют создавать задачи PPL как для нормальных результатов, так и для исключений.

Производительность приложений C++

  • Автоматический векторизатор теперь распознает и оптимизирует больше шаблонов C++ для ускорения выполнения кода.

  • Усовершенствования, направленные на повышение качества кода для платформы ARM и микроархитектуры Atom.

  • Добавлено соглашение о вызовах __vectorcall.Аргументы типа вектора передаются с помощью соглашения о вызове __vectorcall для использования регистров вектора.

  • Новые параметры компоновщика. Параметры /Gw (компилятор) и /Gy (ассемблер) позволяют включить оптимизации компоновщика для создания более компактных двоичных файлов.

  • Поддержка общей памяти C++ AMP для уменьшения или исключения копирования данных между ЦП и GPU.

  • Усовершенствования профильной оптимизации (вероятностного оптимизатора):

    • Повышение производительности за счет уменьшения рабочего набора приложений, оптимизируемых с использованием вероятностного оптимизатора.

    • Новый вероятностный оптимизатор для разработки приложений Магазин Windows.

Поддержка разработки приложений Магазин Windows

  • Поддержка упакованных типов в структурах значений. Типы значений теперь можно определять с использованием полей, которые допускают значение NULL — например, IBox<int>^, а не int.Это означает, что поля могут или иметь значение или быть равными nullptr.

  • Более подробная информация об исключениях. C++/CX поддерживает новую модель ошибок Windows, которая обеспечивает получение и распространение подробной информации об исключении через двоичный интерфейс приложений (ABI), в том числе стеков вызовов и строк пользовательских сообщений.

  • Object::ToString () теперь виртуальный. Теперь можно переопределять ToString в пользовательских ссылочных типах среды выполнения Windows.

  • Поддержка нерекомендуемых API. Теперь можно помечать открытые API-интерфейсы среды выполнения Windows как нерекомендуемые и предоставлять пользовательские сообщения, которые выводятся как предупреждения при сборке и могут содержать инструкции по миграции.

  • Усовершенствования отладчика. Поддержка отладки взаимодействия машинного кода и JavaScript, диагностики исключений среды выполнения Windows и отладки асинхронного кода (среды выполнения Windows и PPL).

ПримечаниеПримечание

В дополнение к возможностям и усовершенствованиям C++, описанным в данном разделе, в Visual Studio предусмотрены и другие усовершенствования, способные помочь в создании более качественных приложений Магазин Windows.Подробнее об этих усовершенствованиях см. в руководстве по возможностям Windows 8.1.Дополнительные сведения о новых шаблонах приложений см. в статье Шаблоны проектов на C#, VB и C++ для приложений Магазина Windows.Список новых возможностей платформы см. в разделе Windows 8.1 Preview: новые API и возможности для разработчиков.

Усовершенствования диагностики

  • Усовершенствования отладчика. Поддержка асинхронной отладки и отладки только моего кода.

  • Категории анализа кода. Теперь можно просматривать распределенные по категориям выходные данные анализатора кода для поиска и устранения дефектов кода.

  • Диагностика XAML. Теперь можно диагностировать проблемы в разметке XAML, связанные со скоростью реагирования ИП и использованием заряда батарей.

  • Усовершенствования отладки графики и GPU.

    • Удаленные запись и воспроизведение в реальных устройствах.

    • Одновременная отладка C++ AMP и ЦП.

    • Усовершенствованная диагностика среды выполнения AMP C++.

    • Отладка трассировки вычислительных шейдеров, написанных на HLSL.

Усовершенствования трехмерной графики

  • Поддержка конвейером содержимого изображений формата DDS с предумножением альфа-канала.

  • Редактор изображений использует внутреннее предумножение альфа-канала для отрисовки, что позволяет избежать отрисовки артефактов, таких как темные ореолы.

  • Редакторы изображений и моделей. Теперь в конструкторе шейдеров редактора изображений и редактора моделей поддерживается создание пользовательских фильтров.

Интегрированная среда разработки и производительность работы

Интегрированная среда разработки Visual Studio получила значительные усовершенствования, позволяющие повысить производительность при написании кода на языке C++.

  • Усовершенствованное форматирование кода. К коду на C++ теперь можно применять больше параметров форматирования.С помощью этих параметров можно управлять размещением на новых строках фигурных скобок и ключевых слов, отступами, интервалами и переносом на новую строку. Код форматируется автоматически по завершении написания операторов и блоков, а также при вставке кода в файл.Чтобы изменить параметры форматирования, в строке меню в Visual Studio выберите Сервис, Параметры, разверните узлы Текстовый редактор, C/C++ и Форматирование, а затем внесите изменения.Для доступа к этим параметрам можно также использовать окно Быстрый запуск.

  • Завершение скобок. В коде C++ теперь автоматически подставляются закрывающие символы, соответствующие следующим открывающим символам:

    • { (фигурная скобка)

    • [ (квадратная скобка)

    • ( (круглая скобка)

    • ' (одинарная кавычка)

    • " (двойная кавычка)

  • Дополнительные функции автозавершения в языке C++.

    • Добавление точки с запятой для типов классов.

    • Завершение скобок для необработанных строковых литералов.

    • Завершение многострочных комментариев (/* */)

  • Команда Найти все ссылки теперь автоматически разрешает и фильтрует ссылки в фоновом режиме после отображения списка текстовых совпадений. Чтобы отключить разрешение ссылок, в строке меню в Visual Studio выберите Сервис, Параметры, разверните узлы Текстовый редактор, C/C++ и Дополнительно, а затем измените параметр Отключить сопоставление в разделе Ссылки.

Чтобы изменить параметры завершения скобок, в строке меню в Visual Studio выберите Сервис, Параметры, разверните узлы Текстовый редактор, C/C++ и Общие, а затем внесите изменения.Можно также изменить параметры для всех языков Visual Studio. Для этого разверните узлы Текстовый редактор, Все языки и Общие.

Чтобы изменить параметры, связанные исключительно с С++, в строке меню выберите Сервис, Параметры, разверните узлы Текстовый редактор, C/C++ и Дополнительно, а затем внесите изменения.

  • Фильтрация списка членов на основе контекста. Недоступные члены отфильтровываются из списка членов IntelliSense. Например, закрытые члены не отображаются в списке членов, кроме случаев, когда вы изменяете код, реализующий тип.Если список членов открыт, можно нажать CTRL+J для удаления одного уровня фильтрации (применяется только к текущему окну списка членов).Можно нажать CTRL+J еще раз, чтобы снять текстовую фильтрацию и отобразить все члены.

  • Прокрутка справки по параметрам. Сигнатура функции, отображаемая в окне подсказки справки по параметрам, теперь меняется в зависимости от количества введенных параметров, а не просто отображает произвольную сигнатуру, которая не обновляется на основе текущего контекста.Справка по параметрам также правильно функционирует, когда отображается во вложенных функциях.

  • Переключение между файлами заголовков и кода. Теперь можно переключаться между заголовком и соответствующим файлом кода с помощью команды контекстного меню или сочетания клавиш.

  • Возможность изменения размера окна свойств проекта С++.

  • Автоматическое создание кода обработчиков событий в C++/CX и C++/CLI. При вводе кода для добавления обработчика событий в файле кода C++/CX или C++/CLI редактор может автоматически создать экземпляр делегата и определение обработчика событий.Если код обработчика событий может быть создан автоматически, открывается окно подсказки.

  • Усовершенствованная поддержка определения DPI. Параметр "Поддержка DPI" для файлов манифеста приложения теперь поддерживает значение "Поддержка высокого DPI по мониторам".

  • Ускорение перехода с одной конфигурации на другую. Для больших приложений переход между конфигурациями (особенно последующие операции переключения) выполняется гораздо быстрее.

  • Оперативность выполнения сборок.

    • Ускорение сборки. Множество оптимизаций и использование нескольких ядер ускоряет сборку, особенно в крупных проектах.Инкрементные сборки для приложений C++, имеющих ссылки на C++ WinMD, выполняются намного быстрее.
  • Сведения о других дополнениях и усовершенствованиях в интегрированной среде разработки см. в разделе Новые возможности Visual Studio 2013 и других статьях, на которые он ссылается.

См. также

Основные понятия

Новые возможности Visual Studio 2013

Другие ресурсы

Блог команды разработчиков Visual C++