現在の位置を内部的に維持するオブジェクトのリストを保持するオブジェクトを作成したので、これは、境界チェックでこの内部位置を効果的にインクリメントする前後のインクリメント演算子をオーバーロードするのに最適な場所であると考えました。
私が気づいたのは、++
オブジェクトを呼び出すと、引数が0
.
テストコード:
#include <stdio.h>
class A {
public:
A& operator++(int n) { printf("%d ", n); return *this; }
};
int main() {
A a;
a++;
a.operator++(0);
a.operator++(1);
a.operator++(10);
return 0;
}
これは を返します0 0 1 10
。私が理解していることから、これは正常な動作です。だから、それは私がどのようにoperator++
働くべきかを再考させました。以前は、++
境界チェックに合格した場合に内部位置変数を呼び出すだけでした。ただし、これには、入力引数が何であれ、1 ずつインクリメントする効果があります。次に、+=
引数n
を右辺として使用することを考えましたが、お気づきのよう++
に、演算子を使用せずに呼び出すだけでは (慣例のように)、0 が返され、位置はインクリメントされません。
基本的に、これは私が心配する必要があるものですか?もしそうなら、ユーザーが本当に 0 を望んでいたかどうか、またはデフォルトの動作 ( a++
) が意図されたものであり、1 ずつインクリメントする必要があるかどうかをどのように検出しますか?