私は形容詞「技術的」を、言語の動作/癖および生成されたコードのパフォーマンスなどのコンパイラーの副作用を意味すると解釈します。
そのための答えは、no(*)です。(*)は「プロセッサーのマニュアルを参照してください」です。エッジケースのRISCまたはFPGAシステムを使用している場合は、生成される命令とそのコストを確認する必要がある場合があります。あなたはかなり任意の従来の近代建築を使用している場合でも、そこの間にコストの有意なプロセッサレベル差はありませんlt
、eq
、ne
とgt
。
場合あなたがエッジケースを使用している、あなたはそれが見つけることができる!=
3つの操作(必要としcmp
、not
、beq
2(VS)をcmp
、blt xtr myo
)。この場合も、RTMです。
ほとんどの場合、その理由は、特にポインターや複雑なループを操作する場合に、防御的/強化的です。検討する
// highly contrived example
size_t count_chars(char c, const char* str, size_t len) {
size_t count = 0;
bool quoted = false;
const char* p = str;
while (p != str + len) {
if (*p == '"') {
quote = !quote;
++p;
}
if (*(p++) == c && !quoted)
++count;
}
return count;
}
それほど工夫されていない例は、戻り値を使用して増分を実行し、ユーザーからデータを受け入れる場合です。
#include <iostream>
int main() {
size_t len = 5, step;
for (size_t i = 0; i != len; ) {
std::cout << "i = " << i << ", step? " << std::flush;
std::cin >> step;
i += step; // here for emphasis, it could go in the for(;;)
}
}
これを試して、値1、2、10、999を入力してください。
あなたはこれを防ぐことができます:
#include <iostream>
int main() {
size_t len = 5, step;
for (size_t i = 0; i != len; ) {
std::cout << "i = " << i << ", step? " << std::flush;
std::cin >> step;
if (step + i > len)
std::cout << "too much.\n";
else
i += step;
}
}
しかし、おそらくあなたが欲しかったのは
#include <iostream>
int main() {
size_t len = 5, step;
for (size_t i = 0; i < len; ) {
std::cout << "i = " << i << ", step? " << std::flush;
std::cin >> step;
i += step;
}
}
向けた条約バイアスの何かがある<
標準コンテナ内の順序は、多くの場合に依存しているため、operator<
いくつかのSTLコンテナでのインスタンスのハッシュが言って平等を決定するために、
if (lhs < rhs) // T.operator <
lessthan
else if (rhs < lhs) // T.operator < again
greaterthan
else
equal
もしlhs
およびrhs
ユーザ定義のクラスは、このコードを書いているように
if (lhs < rhs) // requires T.operator<
lessthan
else if (lhs > rhs) // requires T.operator>
greaterthan
else
equal
実装者は2つの比較関数を提供する必要があります。それで<
、支持されたオペレーターになりました。
i++
した場合i+=2
、非常に長時間(または場合によっては永久に)実行されます。さて、通常は<
、イテレータを1 以上インクリメントする場合に使用するので、イテレータを1<
ずつインクリメントする場合にも使用できます(整合性のため)。