XCode for iPhone アプリで C++ 例外処理を有効にした場合の結果を知っている人はいますか? デフォルトでは無効になっているようです。
C++ と Objective C の例外は同じですか、それとも C++ の例外は C++ コードでしかキャッチできませんか? その逆も可能ですか?
ありがとう
XCode for iPhone アプリで C++ 例外処理を有効にした場合の結果を知っている人はいますか? デフォルトでは無効になっているようです。
C++ と Objective C の例外は同じですか、それとも C++ の例外は C++ コードでしかキャッチできませんか? その逆も可能ですか?
ありがとう
XCode for iPhone アプリで C++ 例外処理を有効にした場合の結果を知っている人はいますか?
これは、C++ 例外処理の通常の選択です。C++ ライブラリを使用している場合は、これを有効にする必要があります。
例外がイメージの境界を越えてきれいに伝播すると仮定してはなりません。つまり、 Foundation フレームを通過して反対側でキャッチするように定義されていると想定することはできません。IOW, throw MyLib->through Foundation->catch in MyAppにより、未定義の動作が発生する可能性があります。したがって、これらを MyLib でキャッチする必要があると想定する必要があります。
OS X とは異なり、iPhone の C++ および ObjC の例外は、「ゼロ コストの例外」を使用して実装されていません。サイズよりも実行速度を優先するゼロ コストの例外は、アンワインド テーブルのサイズとコンパイラ サポートのために使用されませんでした。
例外を有効にするには、ある程度の速度とサイズが必要です。iOS のほとんどのプログラムでは、10% 未満になると思います。
最終的には、例外を有効にするかどうかを決定する必要があり、実行とサイズのオーバーヘッドが発生します。非常に特殊な C++ ライブラリを使用している場合を除き、それらを有効にする必要があると想定する必要があります。ただし、機能はサポートされています。
C++ と Objective C の例外は同じですか、それとも C++ の例外は C++ コードでしかキャッチできませんか? その逆も可能ですか?
64 ビット OS X および iOS 環境では、C++ および ObjC の例外はいずれかのハンドラーを使用してキャッチできます。32 ビット OS X では、異なる例外モデルを使用します。したがって、'catch all' 式 (いずれかの言語で記述) は、iOS と 64 ビット OS X では C++ と ObjCの両方の例外をキャッチできますが、32 ビット OS X ではキャッチできません。