Ответ 1
Objective-C ++ просто позволяет смешивать Objective-C и код С++ (с оговорками). Это не само по себе язык, а механизм, позволяющий смешивать два языка.
Как говорится в названии... считаются ли они разными языками? Например, если вы написали приложение с использованием комбинации С++ и Objective-C ++, вы бы считали, что это было написано на С++ и Objective-C, С++ и Objective-C ++ или на всех трех?
Очевидно, что C и С++ - разные языки, хотя С++ и C напрямую совместимы, как ситуация с Objective-C ++ и Objective-C?
Objective-C ++ просто позволяет смешивать Objective-C и код С++ (с оговорками). Это не само по себе язык, а механизм, позволяющий смешивать два языка.
Objective-C ++ является интерфейсом к сборнику компиляторов GNU, который может скомпилировать исходные файлы, которые используют комбинацию синтаксиса С++ и Objective-C. Objective-C ++ добавляет в С++ расширения Objective-C добавляет C. Поскольку ничего не сделано для унификации семантики за различными языковыми функциями, применяются определенные ограничения:
C и С++ напрямую не совместимы. Также не является надмножеством другого (хотя большинство C является допустимым С++). Objective-C является строгим надмножеством C, а Objective-C ++ является строгим надмножеством С++. Это единственные утверждения, которые вы можете сделать (за исключением тривиально меняющего его).
Трудно ответить на этот вопрос уверенно, не понимая, какое определение "другого языка" вы хотите применить.
Objective-C является надмножеством C: он добавляет дополнительный синтаксис поверх языка C. Objective-C ++ является надмножеством С++ таким же образом.
C и С++ - фактически разные языки. Хотя С++ предназначен для совместимости, существует C, который не является допустимым С++ и наоборот.
Итак, я бы сказал, да, Objective-C ++ - это другой язык из Objective-C, потому что С++ - это другой язык из C. Однако я бы не назвал их совершенно разными.
Objective-C, вероятно, является официальным термином, который вы бы вложили в резюме.
Objective-C ++ на самом деле не новый язык, он просто указывает несколько вещей, которые позволяют коду Objective-C сосуществовать с кодом С++. Высказывание вашего приложения было написано в Objective-C, а С++ или просто Objective-C ++ - это, вероятно, то, что вы хотите. Помещая все Objective-C, Objective-C ++, С++ избыточно.
На первый взгляд, использование диалекта Objective-C ++ выглядит как простой подход. Это результат слияния С++ и Objective-C вместе в одном компиляторе, а надежные реализации существуют в GCC и теперь clang. Учитывая, насколько различны детали Objective-C и С++, хакеры GCC отлично справились с этим. Но по мере того, как вы начинаете переименовывать ваши .m файлы в .mm, чтобы представить куски С++, вы быстро понимаете, что это не так просто.
Заголовочные файлы и препроцессор C в целом вызвали головные боли для программистов C, С++ и Objective-C на протяжении десятилетий. Когда вы пытаетесь смешивать языки, становится все хуже. Предположим, вы хотели использовать STL-карту в классе Objective-C в вашем проекте. Библиотеки Apple Foundation, насколько мне известно, не содержат сортированную, основанную на деревьях карту; один из наших компонентов StyleKit нуждается именно в этом, например. Поэтому мы просто создаем переменную экземпляра для карты в нашем классе, и мы уходим:
#include <map>
@interface MyClass : NSObject {
@private
std::map<int, id> lookupTable;
}
// ...
@end
Однако std:: map [2] имеет смысл только для компилятора, поддерживающего С++, и только после #include [3], поэтому этот заголовок теперь может быть #imported из файлов Objective-C ++. Любой код, использующий этот класс, теперь должен быть преобразован в Objective-C ++ сам, а импорт из других заголовков приводит к каскадному эффекту, который быстро охватывает весь проект.
В некоторых случаях это может быть приемлемым. Однако переключение целого проекта или его больших частей только для того, чтобы ввести библиотеку, которая используется в одном месте, не только чрезмерна; если вы единственный, кто знает С++ в проекте с несколькими программистами Objective-C, вы можете обнаружить, что это непопулярная идея. Это также может вызвать проблемы таким же образом, что компиляция чистого C-кода с помощью компилятора С++ редко бывает без проблем. Более того, это означает, что код не может автоматически использоваться повторно в других проектах Objective-C.
Так что всегда лучше не смешивать, если это так важно
Чтобы узнать больше о стратегиях использования объектного С++ в объекте c и наоборот, нажмите здесь