30

新しいクラスを作成するときは、デフォルトで.mm拡張子を使用する傾向があるため、後で必要に応じてObjC++を使用できます。

これを行うことに不利な点はありますか?いつご希望.mですか?より高速な実行可能ファイルにコンパイルしますか.m(Cは一般的にC ++よりも高速であるため)?

4

2 に答える 2

47

「通常の」Objective-C で.mmoverを使用することの主な欠点は、Objective-C++ のコンパイル時間が大幅に長くなることです。.mこれは、C++ コンパイラが C コンパイラよりも時間がかかるためです。Xcode 3.2 以降では、Objective-C コードでClangフロントエンド ツール チェーンを使用して、Objective-C/C のコンパイル時間を大幅に短縮できます。Clang はまだ Objective-C++/C++ をサポートしていないため、2 つの間のコンパイル時間のギャップがさらに広がります。

より良い戦略は.m、デフォルトで使用することです。開発の後半で Objective-C++ を使用する必要がある場合、.mm拡張子を使用するようにファイルの名前を変更しても害はありません。XCode 内からそうする場合、プロジェクトは自動的に更新され、新しく名前が付けられたファイルが使用されます。

もちろん、実行時に Objective-C++ と Objective-C のパフォーマンスを比較しようとすると、すべての標準的な警告が適用されます。Objective-C++ は C++ スーパーセットであり、Objective-C は C スーパーセットであるため、実行時にそれぞれパフォーマンスのトレードオフを伴う 2 つの異なる言語を扱っています。Objective-X をまったく使用していることを考えると、(システム レベルのアプリではなく) ユーザー レベルのアプリケーションを作成している可能性が高く、C と C++ のパフォーマンスの違いは、効率的なアルゴリズムをコード化する能力によって完全に決まる可能性があります。各言語。あなたが C++ 開発者であれば、C よりも優れたコーディングを行う可能性が高く、その逆も同様です。したがって、いつものように、仕事に適したツールを使用してください。

参考までに、この回答にも興味があるかもしれません: C vs C++ (Objective-C vs Objective-C++) for iPhone

2012 年 2 月 17 日更新Xcode 4.0 (LLVM 3.0 を使用) の時点で、Clang は Objective-C++ をサポートしています。C++11 のサポートでさえ、今では非常に強力です。

于 2010-02-23T20:08:07.390 に答える
8

C 機能のみを使用する場合、.mm ファイルは .m と非常によく似たコードを生成するはずです。

後で C++ 機能が必要な場合に、ファイルの名前を .m から .mm に変更することにもマイナス面はありません。

于 2010-02-23T15:39:57.593 に答える