オペレータのリロードと暗黙的な変換の思考

1224 ワード

仕事を始めたばかりの頃から、C++のオペレータの重荷や暗黙的な転換を批判する人が多く、私もずっと明示的に呼び出しを続けていましたが、最近C++関連のライブラリを見てみると、実はこの2つはそんなに怖くなく、逆にいくつかの面で完璧に近い銀弾でした!
iOS開発にはアルゴリズムを記述するNSPredicateがあり、このクラスの使用方法については、かなり複雑である.
sqlでは、a > b AND a < 100のような複雑な判断論理があるが、これらは厳密なタイプ制限ではなく、aが時間タイプである場合、< 100という条件は無効または未知の行為である可能性がある.実行中にこの問題を発見することはできますが、コンパイル期間中にこのような問題を発見することはできません.C++は上記の問題をうまく解決することができ、厳格なタイプ判定といくつかのタイプ変換があります.
Objcでは、多くのapiがうるさいので、良いことを言って意味を表すことができますが、簡単なことでコードが複雑になることが多いです.例:
[string stringByAppendingString:@"string"];
[a isEqualToString:b];

デフォルトのいくつかの方法では、認知上の曖昧さは生じません.
string + "";
a == b;

現在、多くの計算はCPUで実行されるのではなく、機械学習や画像レンダリングなどのGPUで実行される必要がある.では、GPUの演算方式をどのように定義しますか?有名なOpenGLは自分のGLSL言語を定義し、iOSのCIImageも似たような言語を定義しています.しかし、これらには同じ問題があります.それは、実行期間がコンパイルされ、実行され、コンパイラで問題が発見されないことです.コンパイル期間を置くには、言語の特性を利用する必要があります.最も簡単なベクトル演算でオペレータを再ロードできない場合は、最も簡単な演算vec2 = vec1 * 2 + 2を記述することも災難的です.
したがって、場合によっては、このような特性を利用することは非常に便利であり、コードの可読性も向上する.
iOSの一部のライブラリでは、realmwcdbなどの特性が利用されています.
もちろん、ここで言う利点は、劣勢がないわけではありませんが、このような特性をうまく利用することで、可読性を向上させることができます.