Новые возможности 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