Примеры кода ISO C ++, который не является допустимым C ++ / CLI - PullRequest
5 голосов
/ 06 января 2011

В Интернете я видел противоречивые ответы о том, является ли C ++ / CLI надмножеством C ++ или нет.

Принятый ответ на этот вопрос утверждает, что "технически нет", но не предоставляет примеры кода не-C ++ / CLI, который соответствует ISO C ++. Другой ответ на этот вопрос приводит книгу, в которой говорится об обратном.

Итак, не могли бы вы предоставить точные ответы с примером кода , который не работает на C ++ / CLI, или указать надежный источник (например, MSDN) по этому вопросу?

У меня был кто-то, кто обсуждает эту тему сегодня, и подумал, что хотел бы сообщить себе, но я не нашел четкого ответа в другом месте!

Ответы [ 2 ]

9 голосов
/ 06 января 2011

Допустимый C ++, недопустимый C ++ / CLI:

int main()
{
    int gcnew = 42;
}

gcnew, generic и nullptr - все зарезервированные слова в C ++ / CLI;nullptr на самом деле не проблема в C ++ 0x, конечно.Херб Саттер писал о ключевых словах C ++ / CLI: «Под капотом» в 2003 г.Я никогда не сталкивался с проблемами синтаксиса или тривиальными проблемами, подобными этому.Гигантская проблема с C ++ / CLI (на мой взгляд, конечно) заключается в том, что нативный код и управляемый код имеют совершенно разные парадигмы управления ресурсами, и при написании смешанного кода действительно легко забыть, какая парадигма вам нужна для определенных вещей.Я исправил множество ошибок, которые были вызваны предположением, что управляемые ресурсы были уничтожены детерминистически или что собственные ресурсы будут очищены сборщиком мусора.

2 голосов
/ 06 января 2011

Я задаюсь вопросом о множестве полемики суперсета / расширения.C ++ / CLI - это новый язык, разработанный как связующее звено между ISO C ++ и ISO CLI.Я от всей души рекомендую прочитать C ++ / CLI Design Rationale , в которой четко сформулированы цели проектирования в самом начале документа:

C ++ / CLI - предоставить прямой доступПрограммисты C ++ могут использовать существующие библиотеки CLI и создавать новые, практически без потерь производительности, с минимальным количеством дополнительных обозначений и с полной совместимостью с ISO C ++.

...