Effective C++
C++をもっと理解するためにこの本を読み終わった後、もっとC++を理解するために覚える、知るべきこと。
標準ライブラリに精通しようこれもタイトル通りです。
コンパイラの警告に注意しようタイトルの通りです。
非ローカルstaticオブジェクトは、使用前に必ず初期化されるようにしようグローバルまたは名前空間で定義されていて、クラス内でstaticと宣言されている、またはファイルスコープでstaticと指定されたオブジェクトの初期化順序は特に規定されていません。 順…
ランタイムエラーよりは、コンパイル時やリンク時のエラーのほうがいいC++はコンパイル時やリンク時のエラーを検出するのに優れています。 ランタイムにエラー検出を行うより、コンパイル時やリンク時に行うほうが安全なので、できる限りコンパイル時やリン…
C++がどんな関数を黙って書き、呼び出しているのか、知っておこうクラスを書くときに、コピーコンストラクタ、代入演算子、コンストラクタ、デストラクタ、アドレス演算子を自分で宣言しないと、コンパイラが自動で作成します。
あなたの意図することを言おう、自分が言っていることの意味を理解しよう自分の書いたコードに含まれる、継承や包含、仮想関数がどういった意味を持つのか理解する必要があります。
多重継承は慎重に使おう 多重継承を使うと、名前衝突により問題が起こることがあります。 あいまいな状態になるときは、 ①同名の関数を複数継承したとき、関数を個別に再定義できない問題 ②1つのクラスを複数の経路で継承してしまうとき、名前解決があいま…
privateな継承はよく考えてから使おう
継承とテンプレートの違いを理解しよう継承 : オブジェクトが継承可能な関係で、型によって振る舞いを変えたいとき テンプレート : 複数の型に、型によって変わることのない振る舞いを与えたいとき。
「それを持っている」関係や「それを実装手段とする」関係は、層を重ねる形でモデル化しようタイトルのような関係が成り立つときは、持たれるものを、親のデータメンバに含めます。 層を重ねる、包含、合成などと呼ばれています。
継承の階層構造を下る方向のキャスト(ダウンキャスト)は避けようダウンキャストを安全に行えるdynamic_castがありますが、dynamic_castは使うべきではありません。
継承したデフォルトパラメータ値を再定義してはならない基底クラスの仮想関数のデフォルトパラメータと、サブクラスの継承された関数のデフォルトパラメータが違う場合、基底クラスの仮想関数のデフォルトパラメータが継承された関数にも適用されます。 具体…
継承した非仮想関数を再定義してはならない36項で、"非仮想関数を宣言する目的は、関数のインタフェースと強制的な実装を継承させる"としたので、継承した非仮想関数を再定義してはいけません。 継承した非仮想関数を再定義してしまうと、強制的な実装ではな…
インタフェースの継承と実装の継承とを区別しよう
publicに継承するときは、「その一種である」関係のモデルかどうか確認しよう
コンパイルするファイル間の依存性はできるだけ減らそう
関数はよく考えてからインライン化しよう
変数の定義は、できるだけ後回しにしよう変数の定義を必要なときに行うことで、無駄な変数の定義をを避けられます。 コンストラクタの呼び出し回数を減らすことができ、変数定義と処理が近い場所で書かれているため、コードの可読性が高まります。
関数は、ローカルオブジェクトへのリファレンスや関数の中でnewで初期化したポインタの参照先を返してはならない関数内でローカルオブジェクトへのリファレンスを返すと、関数スコープを抜けたときにローカルオブジェクトが破壊され、リファレンスの指したも…
メンバ関数は、自分よりもアクセス制限がきついメンバへの非constポインタや参照を返さないようにしようprotectedやprivateなメンバへのハンドルを返してしまうと、アクセス制限の意味がなくなってしまいます。 データを返すなら値返しで、ハンドルを返すな…
内部データの「ハンドル」を返すのはやめよう内部データのハンドルをそのまま返してしまうと、意図しないデータの書き換えが発生することがあります。 できる限り内部データのハンドルは返さないべきですが、返す必要があるときは、const指定をして返します。
グローバルな名前空間は分割しよう
暗黙のうちに生成される不要なメンバ関数は、明示的に使用を禁止しよう
潜在的な多義性に対するガードを固めよう関数をオーバロードしたときや、多重継承をしたときなどには、潜在的な多義性があります。 この問題を完全に防ぐのは不可能なので、注意を怠らないことが重要です。
25項 ポインタと数値型とにオーバロードするのは避けよう
関数のオーバロードとデフォルトつきパラメータは、慎重に使い分けよう
オブジェクトを返さなければならないときに、リファレンスを返そうとがんばるのはやめよう
値渡しよりも、リファレンス渡しを使おう
"使えるときは、必ずconstを使おう"