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

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

Компилятор и компоновщик Visual C++

Ключевое слово "auto"

Ключевое слово auto имеет новую цель. Значение ключевого слова auto, заданное по умолчанию, используется для объявления переменной, тип которой выводится из выражения инициализации в объявлении переменной. Параметр компилятора /Zc:auto вызывает либо новое, либо предыдущее значение ключевого слова auto.

Описатель типа decltype

Описатель типа decltype возвращает тип указанного выражения. Описатель типа decltype используется в сочетании с ключевым словом auto для объявления типа, который является комплексным или известен только компилятору. Например, это сочетание используется для объявления функции шаблона, возвращаемый тип которой зависит от типов аргументов шаблона. Или же для объявления функции шаблона, вызывающей другую функцию и возвращающей возвращаемый тип вызываемой функции.

Лямбда-выражения

Лямбда-функции имеют тело функции, но не имеют имени. Лямбда-функции сочетают лучшие характеристики указателей функций и объектов функций.

Лямбда-функция используется самостоятельно как параметр функции шаблона вместо объекта функции или вместе с ключевым словом auto для объявления переменной, тип которой — lambda.

Ссылка Rvalue

Декларатор ссылки rvalue (&&) объявляет ссылку на rvalue. Ссылка rvalue позволяет использовать семантику перемещения и точную пересылку для написания более эффективных конструкторов, функций и шаблонов.

Объявление static_assert

Объявление static_assert тестирует утверждение программного обеспечения во время компиляции в отличие от других механизмов утверждения, которые выполняют тестирование во время выполнения. Если утверждение не выполняется, не выполняется и компилирование. При этом выводится сообщение об ошибке.

Ключевые слова nullptr и __nullptr

Компилятор Visual C++ позволяет использовать ключевое слово nullptr с машинным или управляемым кодом. Ключевое слово nullptr показывает, что обработка объекта, тип внутреннего или собственного указателя не указывает на объект. Компилятор обрабатывает nullptr как управляемый код при использовании параметра компилятора /clr и как машинный код, когда параметр /clr не используется.

Ключевое слово __nullptr корпорации Microsoft имеет такое же значение, как и nullptr, но относится только к машинному коду. При компиляции машинного кода C/C++ с использованием параметра компилятора /clr, компилятор не может определить, относится ли ключевое слово nullptr к машинному или управляемому типу. Чтобы сделать запрос понятным для компилятора, используется ключевое слово nullptr для указания управляемого типа и __nullptr для указания машинного типа.

Параметры компилятора /Zc:trigraphs

По умолчанию поддержка триграфов отключена. Для включения поддержки триграфов используйте параметр компилятора /Zc:trigraphs.

Триграф состоит из двух последовательных вопросительных знаков (??), за которыми следует третий уникальный знак. Компилятор заменяет триграф на соответствующий знак пунктуации. Например, компилятор заменяет триграф ??= на знак # (решетка). Следует использовать триграфы в файлах ресурсов С, которые используют набор символов, не содержащий определенных знаков пунктуации.

Новый параметр профильной оптимизации

PogoSafeMode — новый параметр профильной оптимизации, позволяющий указывать, какой режим следует использовать при оптимизации приложения: быстрый или безопасный. Безопасный режим — потокобезопасный, но работает медленнее быстрого режима. Быстрый режим — поведение по умолчанию.

Новый параметр общеязыковой среды выполнения (CLR) /clr:nostdlib

Новый параметр добавлен для /clr (Common Language Runtime Compilation). Если различные версии одних и тех же библиотек включены, выдается ошибка компилятора. Новый параметр позволяет исключать библиотеки среды CLR по умолчанию, что позволяет программе использовать указанную версию.

Новая pragma-директива detect_mistmatch

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

Встроенные функции XOP, FMA4 и LWP

Новые встроенные функции были добавлены для поддержки процессорных технологий Встроенные объекты XOP, добавленные в Visual Studio 2010 с пакетом обновления 1 (SP1), Встроенные объекты FMA4, добавленные в Visual Studio 2010 с пакетом обновления 1 (SP1) и Встроенные объекты LWP, добавленные в Visual Studio 2010 с пакетом обновления 1 (SP1). __cpuid, __cpuidex следует использовать для определения процессорных технологий, поддерживаемых конкретным компьютером.

Проекты Visual C++ и система построения

MSBuild

Решения и проекты Visual C++ строятся теперь с использованием программы MSBuild.exe, которая заменяет VCBuild.exe. MSBuild — такой же гибкий, развитый, основанный на XML инструмент построения, используемый другими языками Visual Studio и типами проекта. Из-за такого изменения файлы проектов Visual C++ теперь используют формат файла XML и имеют расширение имени файла VCXPROJ. Файлы проекта Visual C++ из более ранней версии Visual Studio автоматически преобразуются в новый формат файла. Дополнительные сведения см. в разделе MSBuild (Visual C++).

Каталоги VC++

Параметр каталогов VC++ теперь находится в двух местах. Чтобы задать значения каталогов VC++ по проектам, используйте страницы свойств проекта. Для установки глобальных значений каталогов VC++ для каждой конфигурации используйте Управление свойствами и страницу свойств.

Зависимости проекта от проекта

В более ранних версиях зависимости между проектами хранились в файле решения. При преобразовании этих решений в новый формат файла проекта зависимости преобразуются в ссылки проекта на проект. Такое изменение может влиять на приложения, так как зависимости решений отличаются от ссылок между проектами.

Макросы и переменные среды

Новый макрос _ITERATOR_DEBUG_LEVEL вызывает поддержку отладки для итераторов. Рекомендуется использовать этот макрос вместо устаревших макросов _SECURE_SCL и _HAS_ITERATOR_DEBUGGING.

Библиотеки Visual C++

Библиотеки среды выполнения с параллелизмом

Платформа среды выполнения с параллелизмом поддерживает приложения и компоненты, выполняемые одновременно, и является платформой параллельного программирования для Visual C++. Для поддержки программирования приложений с параллелизмом в Библиотека параллельных шаблонов имеются контейнеры и алгоритмы общего назначения для выполнения специфических операций параллелизма. Библиотека Библиотека асинхронных агентов предоставляет модель программирования на основе субъектов и интерфейсы передачи сообщений для недетализированного потока данных и задач по конвейеризации.

Стандартная библиотека C++

В следующем списке описываются многие изменения, внесенные в стандартную библиотеку C++.

  • С помощью новой функции ссылки rvalue языка C++ были реализованы семантика перемещения и точная пересылка для многих функций стандартной библиотеки шаблонов (STL). Семантика перемещения и точная пересылка значительно повышают эффективность операций выделения памяти и присвоения значений переменным и параметрам.

  • Ссылки rvalue также служат для реализации нового класса unique_ptr, который представляет собой более безопасный тип интеллектуального указателя по сравнению с auto_ptr. Класс unique_ptr является перемещаемым, но не копируемым, реализует строгую семантику владения без ущерба для безопасности и хорошо работает с контейнерами, поддерживающими ссылки rvalue. Класс auto_ptr является устаревшим.

  • Пятнадцать новых функций, например find_if_not, copy_if и is_sorted были добавлены в заголовок <algorithm>.

  • В заголовке <memory> появилась функция make_shared, которая является удобным, надежным и эффективным способом создания общего указателя на объект одновременно с созданием объекта.

  • Заголовок <forward_list> поддерживает одиночные связанные списки.

  • Новые функции-члены cbegin, cend, crbegin и crend реализуют итератор const_iterator для перемещения по контейнеру вперед и назад.

  • Заголовок <system_error> и соответствующие шаблоны поддерживают обработку низкоуровневых системных ошибок.

  • Члены класса exception_ptr могут использоваться для поддержки исключений транспорта между потоками.

  • Заголовок <codecvt> поддерживает преобразование различных кодировок символов Юникод в другие кодировки.

  • Заголовок <allocators> определяет несколько шаблонов, упрощающих выделение и освобождение блоков памяти для контейнеров на основе узлов.

  • В заголовок <random> добавлено множество обновлений.

Библиотека Microsoft Foundation Class (MFC)

Функции Windows 7

Библиотека MFC поддерживает многие функции Windows 7, например пользовательский интерфейс ленты, панель задач, списки переходов, эскизы на вкладках, предварительный просмотр эскизов, индикатор выполнения, дополнительный значок и индексацию для поиска. Поскольку библиотека MFC обеспечивает автоматическую поддержку функций Windows 7, изменение имеющихся приложений может не потребоваться. Для поддержки других функций в новых приложениях требуется указать необходимые функции с помощью Мастера приложений MFC.

Поддержка мультисенсорных технологий

Библиотека MFC поддерживает приложения с мультисенсорным пользовательским интерфейсом, например приложения для операционной системы Microsoft Surface. Мультисенсорные приложения могут обрабатывать сообщения касаний Windows и сообщения жестов, представляющие собой комбинации сообщений касаний. Достаточно просто зарегистрировать для приложения события касаний и жестов, и операционная система будет перенаправлять мультисенсорные события на обработчики событий этого приложения.

Поддержка высоких разрешений

По умолчанию приложения теперь поддерживают высокие разрешения. Если приложение поддерживает высокие разрешения (большое число точек на дюйм), операционная система может масштабировать окна, текст и другие элементы пользовательского интерфейса в соответствии с текущим разрешением экрана. Это означает, что увеличивается вероятность правильного масштабирования изображений без обрезки или пикселизации.

Диспетчер перезапуска

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

CTaskDialog

Класс CTaskDialog можно использовать вместо стандартного окна сообщений CTaskDialog. Класс CTaskDialog отображает и собирает больше данных, чем стандартное окно сообщений.

Библиотека SafeInt

Новая библиотека SafeInt выполняет безопасные арифметические операции, отвечающие за целочисленное переполнение. Библиотека также сравнивает различные виды целых чисел.

Новые макросы библиотеки шаблонных классов ATL

Новые макросы были добавлены в библиотеку ATL для расширения функциональности PROP_ENTRY_TYPE и PROP_ENTRY_TYPE_EX. PROP_ENTRY_INTERFACE и PROP_ENTRY_INTERFACE_EX позволяют добавлять список допустимых CLSID. PROP_ENTRY_INTERFACE_CALLBACK и PROP_ENTRY_INTERFACE_CALLBACK_EX позволяют указывать функцию обратного вызова для определения допустимости CLSID.

Предупреждения /analyze

Большая часть предупреждений /analyze (анализ кода Enterprise) удалена из библиотек CRT, MFC и ATL.

Поддержка анимации и D2D

Теперь библиотека MFC поддерживает анимацию и графическую технологию Direct 2D. В библиотеке MFC имеется несколько новых функций и классов MFC для реализации этих функций. Также имеется два новых пошаговых руководства, демонстрирующих добавление в проект объекта D2D и объекта анимации. Это пошаговые руководства Пошаговое руководство. Добавление объекта D2D в проект MFC и Пошаговое руководство. Добавление анимации в проект MFC.

IDE

В Visual C++ 2010 интегрированная среда разработки была значительно усовершенствована с точки зрения производительности, точности отображаемой информации, масштабируемости и доступных средств, позволяя пользователям работать более эффективно.

Усовершенствования IntelliSense

Система IntelliSense для Visual C++ была полностью переработана, и стала более быстрой, точной и способной обрабатывать проекты большего размера. Для достижения такого результата было введено различие между тем, как разработчик просматривает и изменяет исходный код в интегрированной среде разработке, и тем, как среда разработки использует код и параметры проекта для построения решения.

Из-за такого разделения обязанностей функции просмотра, например Представление классов и новое диалоговое окно Перейти, обрабатываются системой, основанной на новом формате файлов баз данных SQL Server (SDF), пришедшем на смену старым некомпилируемым файлам обозревателя ( NCB). Такие функции IntelliSense, как краткие сведения, автозавершение и справка по параметрам, анализируют единицы преобразования только при необходимости. Гибридные функции, например новое окно Иерархия вызовов, используют комбинацию функций обзора и IntelliSense.

Поскольку функция IntelliSense обрабатывает только ту информацию, которая нужна в текущий момент, интегрированная среда разработки быстрее реагирует на действия пользователя. Кроме того, поскольку информация является более актуальной, содержимое представлений и окон интегрированной среды разработки является более точным. Наконец, поскольку инфраструктура интегрированной среды разработки лучше организована, более функциональна и более масштабируема, она позволяет работать с более крупными проектами.

Улучшенная система ошибок IntelliSense

Интегрированная среда разработки лучше распознает ошибки, которые могут привести к потере IntelliSense, и подчеркивает их красной волнистой линией. Кроме того, интерфейс IDE сообщает обо всех ошибках IntelliSense в Окне списка ошибок. Для отображения кода, который вызвал проблему, дважды щелкните ошибку в Окне списка ошибок.

Функция автозавершения #include

Интерфейс IDE поддерживает автозавершение для ключевого слова #include. При вводе слова #include в интегрированной среде разработки отображается раскрывающийся список допустимых файлов заголовков. Если продолжить вводить имя файла, интерфейс IDE фильтрует список файлов согласно вводимому тексту. В любой момент можно выбрать в списке файл, который необходимо включить в код. Это позволяет быстро включать файлы, если неизвестны их точные имена.

Функция "Перейти к"

Диалоговое окно Перейти позволяет выполнять в проекте поиск по всем символам и файлам, соответствующим указанной строке. Результаты поиска моментально пересматриваются в процессе ввода дополнительных символов в строку поиска. В окне Результаты отображается число найденных элементов и другие сведения, позволяющие понять, нужно ли ограничивать поисковый запрос. Поля Вид/область, Расположение и Просмотр позволяют различать элементы с одинаковыми именами. Кроме того, эту функцию можно расширить для поддержки других языков программирования.

Параллельная отладка и профилирование

Отладчик Visual Studio поддерживает среду выполнения с параллелизмом и позволяет устранять неполадки в приложениях с параллельной обработкой. Новое средство профилирования параллелизма позволяет графически представлять общее поведение приложения. Кроме того, с помощью новых окон инструментов можно отображать состояния задач и их стеки вызовов.

Конструктор лент

Конструктор лент — это графический редактор, позволяющий создавать пользовательский интерфейс ленты MFC и изменять его. Окончательная лента представляется файлом ресурсов на базе XML (MFCRIBBON-MS). Для существующих приложений можно получить текущий интерфейс в виде ленты, временно добавив несколько строк кода и вызвав Конструктор лент. После создания файла ресурсов ленты можно заменить самостоятельно написанный код пользовательского интерфейса ленты несколькими инструкциями, загружающими ресурс ленты.

Иерархия вызовов

Окно Иерархия вызовов позволяет переходить ко всем функциям, вызываемым определенной функцией, или ко всем функциям, которые вызывают определенную функцию.

Средства

Мастер классов MFC

В Visual C++ 2010 снова появилось популярное средство Мастер классов MFC. Мастер классов MFC — это удобный способ добавления в проект классов, сообщений и переменных без необходимости вручную изменять наборы исходных файлов.

Мастер элементов управления ATL

Мастер элементов управления ATL теперь не заполняет автоматически поле ProgID. Если элемент управления ATL не имеет ProgID,, другие инструменты могут не работать с ним. Одним из примеров инструмента, требующего от элементов управления наличия ProgID, является диалоговое окно Вставить активный объект. Дополнительные сведения о диалоговом окне см. в разделе Диалоговое окно "Вставка элемента управления ActiveX".

Справочные материалы по ассемблеру Microsoft Macro Assembler

Дополнение к типу данных YMMWORD поддерживает 256-битные операнды мультимедиа, которые включены в инструкции Intel Advanced Vector Extensions (AVX).

См. также

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

Критические изменения в Visual C++

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

Начало работы с Visual C++ 2010