『C++Primer』ノート-C++安全な汎用プログラミング習慣

1355 ワード

私は最終的にこの話をメモすることにしました.それらの疑問も私の疑問だからです.
要点:
1.C++プログラマーは優先選択に慣れています!=<ではなく<でサイクル判定条件を記述します.本書の第2部の汎用プログラミングを勉強した後、この習慣の合理性がわかります.
2.for文のカッコでsize関数を直接呼び出して条件を判断し、forループの前にsizeの値を保存するのではなく(効率を高めるため、sizeを保存することに慣れていた).
ループに新しい要素を加え,size関数を用いて誤りが発生しないと判断し,また新しく加えた要素も含めた.
3.C++の一部の関数はインライン関数として宣言できる.コンパイラは、実際の関数呼び出しではなく、インライン関数に遭遇すると、対応するコードを直接拡張します. 
 for (vector<int>::size_type ix = 0; ix != ivec.size(); ++ix)


                  ivec[ix] = 0; 
肝心な概念:安全な汎用プログラミング
CやJavaプログラミングに慣れているC++プログラマーは理解しづらいかもしれませんが、forループの判断条件用!=<ではなく、vectorの下付き値が境界を越えているかどうかをテストします.Cプログラマが理解しにくいのは、前述の例ではforループの前にsizeメンバー関数を呼び出し、返された値を保存するのではなく、for文ヘッダでsizeメンバー関数を呼び出すことである.
C++プログラマーは優先選択に慣れています!=<ではなく<でサイクル判定条件を記述します.上記の例では、オペレータを選択または使用しないことには、特に取捨選択の理由はありません.本書の第2部の汎用プログラミングを勉強した後、この習慣の合理性がわかります.
返される値を保存せずにsizeメンバー関数を呼び出すことは、この例では必要ありませんが、良いプログラミング習慣を反映しています.C++では、vectorなどのデータ構造が動的に成長する場合があります.前の例では、ループは要素を読み込むだけで、新しい要素を追加する必要はありません.しかし、ループは容易に新しい要素を増加させることができ、確かに新しい要素を増加させると、保存されたsize値をループの終了条件としてテストするのは、新しく追加された要素を計算していないため問題がある.したがって、サイクルに入る前にsize値のコピーを格納するのではなく、sizeの現在の値を各サイクルでテストする傾向があります.
第7章では,C++の一部の関数がインライン関数として宣言できることを学習する.コンパイラは、実際の関数呼び出しではなく、インライン関数に遭遇すると、対応するコードを直接拡張します.sizeのような小さなライブラリ関数はほとんどインライン関数として定義されているため、ループ中に呼び出されるたびに実行時のコストは比較的小さい.