3

次のような値を割り当てる方法を見つけました。

NSString *result = [self string] ?: @"none";

[self string]nil に等しくない値を返す場合、結果はその戻り値になり、それ以外の場合は @"none" になります。Pythonorの演算子と同じです。

いくつかのケースでテストしましたが、正常に動作します。お気に入り:

int a = 10 ?: 0; // a is 10
int a = 0 ?: 5; // a is 5
NSString *str = @"abc" ?: 10; // warning: incompatible pointer. It has type checking?

しかし、この構文に関する関連ドキュメントや情報は見つかりませんでした。それで、なぜそれが機能するのか疑問に思いました。誰かがそれを説明できますか?

4

1 に答える 1

3

これは C の GNU 拡張であり、ここに文書化されています。式を 1 回だけ評価し、結果を再利用することに注意してください (式に副作用がある場合に便利です)。clang には含まれていますが、関連するドキュメントが見つかりません。


編集: LLVM を使用した実装のクラス リファレンスは次のとおりです: http://clang.llvm.org/doxygen/classclang_1_1BinaryConditionalOperator.html

それが言うことに注意してください:

BinaryConditionalOperator - 中間オペランドを省略できる条件演算子の GNU 拡張。

于 2013-08-12T15:04:16.517 に答える