Efficient C++ 1~5章 まとめ

Efficient C++ 1章から5章の簡単なまとめです。


1章 悪戦苦闘の話

引数の値渡し、戻り値など無駄なオブジェクト生成を避ける。
使用しない可能性のある計算やオブジェクトの作成を避ける。
頻繁に呼び出される小さな関数はインライン化しても良い。


2章 コンストラクタとデストラクタ

継承ツリーが大きくなるほど、オブジェクト作成のコストが増加する。
使用する直前までオブジェクトの生成を遅らせる。
コンストラクタの初期化リストでメンバを初期化すべき。


3章 仮想関数

仮想関数呼び出しにはコストがかかるが、そのコストが問題となることは少ない。
基底クラスへのポインタから呼び出される仮想関数は実行時に決定されるため、インライン化できない。(インスタンスから呼び出された関数はインライン化できる。)
基底クラスへのポインタではなくテンプレートを使うとインスタンスからの関数呼び出しとなるので、多態性とパフォーマンスを両立できる。


4章 戻り値の最適化

名前なしオブジェクトを返すことで、戻り値が最適化されやすくなる。
戻り値最適化が適用される条件は、コンパイラ次第


5章 一時オブジェクト

暗黙的な型変換による一時オブジェクトの作成を避けるためには、コンストラクタをexplicitと宣言するか、関数をオーバーロードする。
出来る限り参照渡しや参照返しを使う。
op=演算子を使ってop演算子を定義することで、一時オブジェクトの作成を避けられる。(opは+,-,*,/,%のいずれか)