タイトルが示すように、それらは異なる言語と見なされますか? たとえば、C++ と Objective-C++ の組み合わせを使用してアプリケーションを作成した場合、C++ と Objective-C、C++ と Objective-C++、または 3 つすべてで作成されたと考えますか?
C++ と C は直接互換性がありますが、明らかに C と C++ は異なる言語ですが、Objective-C++ と Objective-C の状況はどうですか?
タイトルが示すように、それらは異なる言語と見なされますか? たとえば、C++ と Objective-C++ の組み合わせを使用してアプリケーションを作成した場合、C++ と Objective-C、C++ と Objective-C++、または 3 つすべてで作成されたと考えますか?
C++ と C は直接互換性がありますが、明らかに C と C++ は異なる言語ですが、Objective-C++ と Objective-C の状況はどうですか?
Objective-C++ は GNU Compiler Collection のフロントエンドであり、C++ と Objective-C の構文を組み合わせて使用するソース ファイルをコンパイルできます。Objective-C++ は、Objective-C が C に追加する拡張機能を C++ に追加します。さまざまな言語機能の背後にあるセマンティクスを統一するために何も行われないため、特定の制限が適用されます。
Objective-C++ では、Objective-C と C++ のコードを混在させることができます (注意事項があります)。それ自体は言語ではなく、2 つの言語を混在させるためのメカニズムです。
C と C++ は直接互換性がありません。どちらも他方のスーパーセットではありません (ただし、ほとんどの C は有効な C++ です)。Objective-C は C の厳密なスーパーセットであり、Objective-C++ は C++ の厳密なスーパーセットです。これらは、作成できる唯一のステートメントです(簡単に逆にすることを除いて)。
適用したい「異なる言語」の定義を理解せずに、この質問に自信を持って答えることは困難です。
Objective-C は C のスーパーセットです。C 言語に追加の構文を追加します。Objective-C++ は、同様に C++ のスーパーセットです。
C と C++ は実際には異なる言語です。C++ は互換性を持つように設計されていますが、一部の C は有効な C++ ではなく、その逆もあります。
つまり、C++ は C とは異なる言語であるため、Objective-C++ は Objective-C とは異なる言語であると言えます。ただし、完全に異なるとは言いません。
一見すると、Objective-C++ の方言を使用することは単純なアプローチのように見えます。これは、C++ と Objective-Cを同じコンパイラでマッシュアップした結果であり、堅牢な実装が GCC に存在し、現在は clang になっています。Objective-C と C++ の詳細がどれほど異なるかを考えると、GCC ハッカーは素晴らしい仕事をしています。しかし、C++ のチャンクを導入するために .m ファイルの名前を .mm に変更し始めると、それほど単純ではないことがすぐにわかります。
ヘッダー ファイルと一般的な C プリプロセッサは、C、C++、Objective-C のプログラマにとって、何十年にもわたって頭痛の種でした。言語を混在させようとすると、さらに悪化します。プロジェクトの Objective-C クラスで STL のマップを使用したいとします。私の知る限り、Apple の Foundation ライブラリには、ソートされたツリーベースのマップは含まれていません。たとえば、StyleKit コンポーネントの 1 つはまさにそれを必要とします。したがって、クラスでマップのインスタンス変数を作成するだけで済みます。
#include <map>
@interface MyClass : NSObject {
@private
std::map<int, id> lookupTable;
}
// ...
@end
ただし、std::map [2] は C++ 対応のコンパイラに対してのみ意味があり、#include [3] の後のみであるため、このヘッダーは Objective-C++ ファイルからのみ #import できます。このクラスを使用するすべてのコードは、Objective-C++ 自体に変換する必要があり、他のヘッダーからインポートすると、プロジェクト全体をすばやく包含するカスケード効果が発生します。
場合によっては、これが許容される場合もあります。ただし、1 つの場所で使用されるライブラリを導入するためだけに、プロジェクト全体またはその大部分を切り替えることは、過剰なだけではありません。複数の Objective-C プログラマーがいるプロジェクトで C++ を知っているのがあなただけなら、これは人気のないアイデアだと思うかもしれません。また、C++ コンパイラを使用して純粋な C コードをコンパイルすることが完全に手間がかからないのと同じように、問題が発生する可能性もあります。さらに、コードが他の Objective-C プロジェクトで自動的に再利用可能ではないことを意味します。
よほど重要でない限り、混同しないほうがよい
Objective C で Objective C++ を使用する戦略、およびその逆の戦略の詳細については、ここをクリックしてください。
Objective-C は、おそらく履歴書に記載する正式な用語です。
Objective-C++ は実際には新しい言語ではなく、Objective-C コードが C++ コードと共存できるようにするいくつかのことを指定しているだけです。あなたのアプリが Objective-C と C++、または単に Objective-C++ で書かれていると言うのは、おそらくあなたが望むものです。Objective-C、Objective-C++、C++ をすべて入れるのは冗長です。