Effective C++

50項 C++をもっと理解するために

C++をもっと理解するためにこの本を読み終わった後、もっとC++を理解するために覚える、知るべきこと。

49項 標準ライブラリに精通しよう

標準ライブラリに精通しようこれもタイトル通りです。

48項 コンパイラの警告に注意しよう

コンパイラの警告に注意しようタイトルの通りです。

47項 非ローカルstaticオブジェクトは、使用前に必ず初期化されるようにしよう

非ローカルstaticオブジェクトは、使用前に必ず初期化されるようにしようグローバルまたは名前空間で定義されていて、クラス内でstaticと宣言されている、またはファイルスコープでstaticと指定されたオブジェクトの初期化順序は特に規定されていません。 順…

46項 ランタイムエラーよりは、コンパイル時やリンク時のエラーのほうがいい

ランタイムエラーよりは、コンパイル時やリンク時のエラーのほうがいいC++はコンパイル時やリンク時のエラーを検出するのに優れています。 ランタイムにエラー検出を行うより、コンパイル時やリンク時に行うほうが安全なので、できる限りコンパイル時やリン…

45項 C++がどんな関数を黙って書き、呼び出しているのか、知っておこう

C++がどんな関数を黙って書き、呼び出しているのか、知っておこうクラスを書くときに、コピーコンストラクタ、代入演算子、コンストラクタ、デストラクタ、アドレス演算子を自分で宣言しないと、コンパイラが自動で作成します。

44項 あなたの意図することを言おう、自分が言っていることの意味を理解しよう

あなたの意図することを言おう、自分が言っていることの意味を理解しよう自分の書いたコードに含まれる、継承や包含、仮想関数がどういった意味を持つのか理解する必要があります。

43項 多重継承は慎重に使おう

多重継承は慎重に使おう 多重継承を使うと、名前衝突により問題が起こることがあります。 あいまいな状態になるときは、 ①同名の関数を複数継承したとき、関数を個別に再定義できない問題 ②1つのクラスを複数の経路で継承してしまうとき、名前解決があいま…

42項 privateな継承はよく考えてから使おう

privateな継承はよく考えてから使おう

41項 継承とテンプレートの違いを理解しよう

継承とテンプレートの違いを理解しよう継承 : オブジェクトが継承可能な関係で、型によって振る舞いを変えたいとき テンプレート : 複数の型に、型によって変わることのない振る舞いを与えたいとき。

40項 「それを持っている」関係や「それを実装手段とする」関係は、層を重ねる形でモデル化しよう

「それを持っている」関係や「それを実装手段とする」関係は、層を重ねる形でモデル化しようタイトルのような関係が成り立つときは、持たれるものを、親のデータメンバに含めます。 層を重ねる、包含、合成などと呼ばれています。

39項 継承の階層構造を下る方向のキャスト(ダウンキャスト)は避けよう

継承の階層構造を下る方向のキャスト(ダウンキャスト)は避けようダウンキャストを安全に行えるdynamic_castがありますが、dynamic_castは使うべきではありません。

38項 継承したデフォルトパラメータ値を再定義してはならない

継承したデフォルトパラメータ値を再定義してはならない基底クラスの仮想関数のデフォルトパラメータと、サブクラスの継承された関数のデフォルトパラメータが違う場合、基底クラスの仮想関数のデフォルトパラメータが継承された関数にも適用されます。 具体…

37項 継承した非仮想関数を再定義してはならない

継承した非仮想関数を再定義してはならない36項で、"非仮想関数を宣言する目的は、関数のインタフェースと強制的な実装を継承させる"としたので、継承した非仮想関数を再定義してはいけません。 継承した非仮想関数を再定義してしまうと、強制的な実装ではな…

36項 インタフェースの継承と実装の継承とを区別しよう

インタフェースの継承と実装の継承とを区別しよう

35項 publicに継承するときは、「その一種である」関係のモデルかどうか確認しよう

publicに継承するときは、「その一種である」関係のモデルかどうか確認しよう

34項 コンパイルするファイル間の依存性はできるだけ減らそう

コンパイルするファイル間の依存性はできるだけ減らそう

33項 関数はよく考えてからインライン化しよう

関数はよく考えてからインライン化しよう

32項 変数の定義は、できるだけ後回しにしよう

変数の定義は、できるだけ後回しにしよう変数の定義を必要なときに行うことで、無駄な変数の定義をを避けられます。 コンストラクタの呼び出し回数を減らすことができ、変数定義と処理が近い場所で書かれているため、コードの可読性が高まります。

31項 関数は、ローカルオブジェクトへのリファレンスや関数の中でnewで初期化したポインタの参照先を返してはならない

関数は、ローカルオブジェクトへのリファレンスや関数の中でnewで初期化したポインタの参照先を返してはならない関数内でローカルオブジェクトへのリファレンスを返すと、関数スコープを抜けたときにローカルオブジェクトが破壊され、リファレンスの指したも…

30項 メンバ関数は、自分よりもアクセス制限がきついメンバへの非constポインタや参照を返さないようにしよう

メンバ関数は、自分よりもアクセス制限がきついメンバへの非constポインタや参照を返さないようにしようprotectedやprivateなメンバへのハンドルを返してしまうと、アクセス制限の意味がなくなってしまいます。 データを返すなら値返しで、ハンドルを返すな…

29項 内部データの「ハンドル」を返すのはやめよう

内部データの「ハンドル」を返すのはやめよう内部データのハンドルをそのまま返してしまうと、意図しないデータの書き換えが発生することがあります。 できる限り内部データのハンドルは返さないべきですが、返す必要があるときは、const指定をして返します。

28項 グローバルな名前空間は分割しよう

グローバルな名前空間は分割しよう

27項 暗黙のうちに生成される不要なメンバ関数は、明示的に使用を禁止しよう

暗黙のうちに生成される不要なメンバ関数は、明示的に使用を禁止しよう

26項 潜在的な多義性に対するガードを固めよう

潜在的な多義性に対するガードを固めよう関数をオーバロードしたときや、多重継承をしたときなどには、潜在的な多義性があります。 この問題を完全に防ぐのは不可能なので、注意を怠らないことが重要です。

25項 ポインタと数値型とにオーバロードするのは避けよう

25項 ポインタと数値型とにオーバロードするのは避けよう

24項 関数のオーバロードとデフォルトつきパラメータは、慎重に使い分けよう

関数のオーバロードとデフォルトつきパラメータは、慎重に使い分けよう

23項 オブジェクトを返さなければならないときに、リファレンスを返そうとがんばるのはやめよう

オブジェクトを返さなければならないときに、リファレンスを返そうとがんばるのはやめよう

22項 値渡しよりも、リファレンス渡しを使おう

値渡しよりも、リファレンス渡しを使おう

21項 使えるときは、必ずconstを使おう

"使えるときは、必ずconstを使おう"