Введение

Язык программирования

C++/CLI — это вариант языка программирования C++, модифицированный для платформы Common Language Infrastructure. Он включен в состав Visual Studio 2005 и более поздних версий и обеспечивает взаимодействие с другими языками .NET, такими как C#. Компания Microsoft разработала C++/CLI как замену Managed Extensions для C++. В декабре 2005 года Ecma International опубликовала спецификации C++/CLI в качестве стандарта ECMA 372.

Изменения синтаксиса

C++/CLI следует рассматривать как самостоятельный язык (например, с новым набором ключевых слов), а не как надмножество C++, ориентированное на Managed C++ (MC++) (чьи нестандартные ключевые слова были оформлены как или). В связи с этим произошли значительные синтаксические изменения, особенно в части устранения неоднозначных идентификаторов и добавления специфичных для .NET возможностей. Многие конфликтующие синтаксисы, такие как множественные версии оператора в MC++, были разделены: в C++/CLI типы .NET reference создаются с использованием нового ключевого слова `gcnew` (то есть, выделение памяти с автоматической сборкой мусора). Кроме того, C++/CLI представил концепцию generics из .NET (похожие, для большинства распространенных задач, на стандартные шаблоны C++, но существенно отличающиеся в реализации).

Ручки

В MC++ существовало два различных типа указателей: указатели были обычными указателями C++, а указатели работали с NET-ссылочными типами. Однако в C++/CLI существует только один тип указателя – обычный указатель C++, а доступ к NET-ссылочным типам осуществляется через "дескриптор" с новым синтаксисом (вместо ). Эта новая конструкция особенно полезна при смешении управляемого и стандартного кода C++; она позволяет чётко определить, какие объекты подлежат автоматической сборке мусора NET, а какие объекты программист должен явно уничтожить.

C++/CX

C++/CX, нацеленный на WinRT, несмотря на то, что генерирует полностью неуправляемый код, использует синтаксис `ref` и `^` для компонентов WinRT с подсчетом ссылок, которые аналогичны COM "объектам".