最近リリースされたDoom 3ソースを見て、C++とOpenGLを強化しようと考えました。これまで多くのことを学んだことがありますが、私は壁に衝突しました。クラス詳細hereメソッドDoom 3 source:なぜ2ベクトルを表すクラスが添え字演算子に2回オーバーロードするのですか?
float operator[] (int index) const
と
体の両方x
クラスは、2人のデータメンバーの一つである
return (&x)[ index ];
(他方はy
ことを読み出す
float & operator[] (int index)
を有し、このクラスは2ベクトル用です)。
各バージョンのヘッダー/プロトタイプの構文を理解することはできますが、なぜそれらが両方とも存在するのかわかりません。
const
は、コンパイルを可能にするだけのヘッダーを区別するためにのみ表示されます(または表示されないようにする)。 (つまり、const
を取り除き、VS2010は両方のヘッダがconst
で終わった場合と同様にコンパイルを拒否します)
なぜrefをfloatに戻すのですか?クラスの7つの他の浮動小数点型のメソッドのどれもこれを行っていないので、私は効率が1つの要素ではないと推測しています(この演算子は他よりも頻繁に呼び出されます)。
ここで何が起こっているかのように任意の洞察力に感謝
...
私は確かに良い答えが得られると確信していますが、最初の方法は、 'const'(つまり、書き込みはしません)というベクトルのメンバーにアクセスできる' const'です。もう1つの方法では、 'const'でないベクトルのメンバーを変更することができます(つまり、参照によって読み書きが可能になります)。 –
[Operator overloading]の重複の可能性があります(http://stackoverflow.com/questions/4421706/operator-overloading) – sbi