Расширения компонентов для платформ среды выполнения
Visual C++ предоставляет расширения языка для помощи в программировании для различных платформ. С помощью Расширения компонентов Visual C++ (C++/CX) можно программировать приложения и компоненты Магазин Windows, компилирующиеся в машинный код. Хотя можно создавать приложения Магазин Windows с помощью программирования непосредственно для интерфейсов модели COM Среда выполнения Windows, используя C++/CX, можно работать с конструкторами, исключениями и другими современными идиомами программирования C++. Для программирования на C++ в управляемой среде выполнения на платформе .NET, можно использовать C++/CLI.
Две среды выполнения, один набор расширений
C++/CX является подмножеством C++/CLI. Для общих расширений C++/CX и C++/CLI, семантика зависит от ориентации на среду CLR или Среда выполнения Windows. Чтобы скомпилировать приложение для запуска на Среда выполнения Windows, укажите параметр компилятора /ZW. Чтобы скомпилировать его для запуска на CLR, задайте параметр компилятора /clr. Эти параметры устанавливаются автоматически при использовании Visual Studio для создания проекта.
Дополнительные сведения о создании приложений C++ для Магазин Windows см. в разделе Roadmap for Windows Store apps using C++.
C++/CLI расширяет стандарт ISO/ANSI C++ и определен стандартом Ecma C++/CLI. Для получения дополнительной информации см. Руководство по программированию в среде .NET в Visual C++.
Ключевые слова типа данных
Расширения языка включают в себя агрегатные ключевые слова, представляющие собой ключевые слова, состоящие из двух токенов, разделенных пробелом. Токены могут иметь одно значение при использовании отдельно, и другое значение, если они используются совместно. Например, ключевое слово «ref» является обычным идентификатором, а слово «class» является ключевым словом, которое объявляет собственный класс. Но если эти слова объединяются в виде ref class, полученное агрегатное ключевое слово объявляет сущность, известную как класс среды выполнения.
Расширения также включают контекстно-зависимые ключевые слова. Ключевое слово рассматривается как контекстно-зависимое, основываясь на типе оператора, содержащего его, и размещении в этом операторе. Например, токен «свойство» может быть идентификатором, или он может объявлять специальный тип общего элемента класса.
В следующей таблице перечислены ключевые слова в расширении языка C++.
Ключевое слово |
Контекстно-зависимый |
Назначение |
Справочные сведения |
---|---|---|---|
ref class ref struct |
Нет |
Объявляет класс |
|
value class value struct |
Нет |
Объявляет класс значений. |
|
interface class interface struct |
Нет |
Объявляет интерфейс |
|
enum class enum struct |
Нет |
Объявляет перечисление. |
|
property |
Да |
Объявляет свойства. |
|
delegate |
Да |
Объявляет делегат. |
|
event |
Да |
Объявление события. |
Спецификаторы переопределения
Можно использовать следующие ключевые слова для уточнения поведения переопределения для наследования. Хотя ключевое слово new не является расширением C++, оно перечислено ниже, поскольку его можно использовать в дополнительном контексте. Некоторые спецификаторы также допустимы для машинного программирования. Для получения дополнительной информации см. Как Объявите описатели переопределения в собственных компиляциях.
Ключевое слово |
Контекстно-зависимый |
Назначение |
Справочные сведения |
---|---|---|---|
abstract |
Да |
Указывает, что функции или классы являются абстрактными. |
|
new |
Нет |
Указывает, что функция не является переопределением версии базового класса. |
|
override |
Да |
Указывает, что метод должен быть переопределением версии базового класса. |
|
sealed |
Да |
Предотвращает использование классов в качестве базовых классов. |
Ключевые слова для универсальных шаблонов
Следующие ключевые слова были добавлены для поддержки универсальных типов. Для получения дополнительной информации см. Универсальные типы и методы (расширения компонентов C++).
Ключевое слово |
Контекстно-зависимый |
Назначение |
---|---|---|
generic |
Нет |
Объявляет универсальный тип. |
where |
Да |
Определяет ограничения, которые применяются к параметру универсального типа. |
Прочие ключевые слова
Следующие ключевые слова были добавлены к расширениям C++.
Ключевое слово |
Контекстно-зависимый |
Назначение |
Справочные сведения |
---|---|---|---|
finally |
Да |
Указывает поведение обработки исключений по умолчанию. |
|
for each, in |
Нет |
Перечисляет элементы коллекции. |
|
gcnew |
Нет |
Выделяет типы в куче со сбором мусора. Используйте вместо new и delete. |
|
ref new |
Да |
Выбирает тип Среда выполнения Windows. Используйте вместо new и delete. |
|
initonly |
Да |
Указывает, что член можно инициализировать только в объявлении или в статическом конструкторе. |
|
literal |
Да |
Создает переменную литерала. |
|
nullptr |
Нет |
Показывает, что обработчик или указатель не указывает на объект. |
Конструкции шаблона
Следующие языковые конструкции реализуются в виде шаблонов, а не в виде ключевых слов. Если указан параметр компилятора /ZW, они определены в пространстве имен lang. Если указан параметр компилятора /clr, они определены в пространстве имен cli.
Ключевое слово |
Назначение |
Справочные сведения |
---|---|---|
array |
Объявляет массив. |
|
interior_ptr |
(Только CLR) Указывает на данные в ссылочном типе. |
|
pin_ptr |
(Только CLR) Указывает на ссылочные типы CLR, чтобы временно отключить систему сборки мусора. |
|
safe_cast |
Определяет и выполняет оптимальный метод приведения для типа среды выполнения. |
|
typeid |
(Только CLR) Извлекает объект Type, описывающий заданный тип или объект. |
Деклараторы
Следующие деклараторы типа указывают среде выполнения автоматически управлять временем существования и удалением выбранных объектов.
Оператор |
Назначение |
Справочные сведения |
---|---|---|
^ |
Объявляет дескриптор объекта, то есть указатель на объект Среда выполнения Windows или CLR, который автоматически удаляется, когда он больше не используется. |
Оператор дескриптора объекта (^) (расширения компонентов C++) |
% |
Объявляет отслеживаемую ссылку, то есть ссылку на объект Среда выполнения Windows или CLR, который автоматически удаляется, когда он больше не используется. |
Дополнительные конструкции и связанные разделы
В этом разделе перечислены дополнительные программные конструкции и разделы, относящиеся к CLR.
Раздел |
Описание |
---|---|
(Среда выполнения Windows и CLR) Включает использование ключевых слов в качестве идентификаторов. |
|
(Среда выполнения Windows и CLR) Позволяет функции принимать переменное число аргументов. |
|
Эквиваленты собственным типам C++ в .NET Framework (C++/CLI) |
Перечисляет типы CLR, используемые вместо целочисленных типов C++. |
Модификатор appdomain __declspec |
Модификатор __declspec, требующий, чтобы статические и глобальные переменные существовали на уровне домена. |
Приведение в стиле C с использованием параметра /clr (C++/CLI) |
Описывает, как интерпретируются приведения в стиле C. |
Соглашение о вызовах __clrcall |
Указывает CLR-совместимое соглашение о вызовах. |
__cplusplus_cli |
|
Описывает, как определять собственные атрибуты среды CLR. |
|
Общие сведения об обработке исключений. |
|
Демонстрирует, как функции-члены могут переопределять произвольные члены. |
|
В этом разделе описано, как клиентская сборка может получить все типы в компоненте сборки. |
|
Описывает условия, при которых типы значений упакованы. |
|
Поддержка характеристик типов компилятором (расширения компонентов C++) |
В этом разделе описано, как определить характеристики типов во время компиляции. |
managed, unmanaged директивы pragma |
Демонстрация, как управляемая и неуправляемая функция могут сосуществовать в одном модуле. |
Модификатор процесс __declspec |
Модификатор __declspec, требующий, чтобы статические и глобальные переменные использовались для каждого процесса по отдельности. |
Показывает CLR-версию данных типа во время выполнения. |
|
Описывает преобразование компилятором строковых литералов в String. |
|
Включает перемещения типа из поставляемой сборки в другую сборку, чтобы клиентскому коду не требовалось быть скомпилированным повторно. |
|
Демонстрирует определяемые пользователем атрибуты. |
|
Импортирует внешние сборки. |
|
Объясняет документацию кода на основе XML с помощью /doc (обработка комментариев документации) (C/C++) |