そのため、前置演算子で大きな頭痛の種に遭遇しました。
Visual C++ 2010 の私のデバッグ ビルドでは。
someArray[++index]
配列インデックスを正しくインクリメントし、それを使用して配列にインデックスを付けます。
私のリリース ビルドでは、配列インデックスを使用し、その後インクリメントしたため、大きな頭痛の種になりました。
奇妙なことに、私のデバッグビルドコードは実際にはしばらく間違っていて、次のように記述していました。
someArray[index++]
これはインデックスを使用してからインクリメントしますが、デバッグ ビルドはまだインデックスをインクリメントしてから値を使用していました。私は今朝まで自分の間違いにさえ気づきませんでした。
これが実際のコードのサンプルです。
for(unsigned int newPointIndex = 0; newPointIndex < newEdgeList.size() - 1;) {
m_edges.push_back(Edge(newEdgeList[newPointIndex], newEdgeList[++newPointIndex]));
}
for ループではインクリメントは発生しません。配列にインデックスを付けている間、ループ内の実際のコードで発生します。これは巧妙な最適化だと思っていましたが、リリース ビルドでは機能しません。
2 回目に配列にインデックスを作成したときは、リリース ビルドではインクリメントされていないインデックスを使用していましたが、デバッグ ビルドでは機能していました。