explicit
数回、コードをリファクタリングするときに、以前のパラメーターなしのコンストラクターにパラメーターを追加したり、以前のマルチパラメーターコンストラクターからパラメーターを削除したりするときに、キーワードを追加するのを忘れました。explicit
これを防ぐために、引数がいくつあっても、すべてのコンストラクターにマークを付ける習慣があります。(もちろん、私が実際に暗黙の変換を必要とするコンストラクターを除いて。)
これにはマイナス面がありますか?パフォーマンス?コンパイル時間?
explicit
数回、コードをリファクタリングするときに、以前のパラメーターなしのコンストラクターにパラメーターを追加したり、以前のマルチパラメーターコンストラクターからパラメーターを削除したりするときに、キーワードを追加するのを忘れました。explicit
これを防ぐために、引数がいくつあっても、すべてのコンストラクターにマークを付ける習慣があります。(もちろん、私が実際に暗黙の変換を必要とするコンストラクターを除いて。)
これにはマイナス面がありますか?パフォーマンス?コンパイル時間?
欠点はありません。C++0x では、マルチパラメーター コンストラクターは、複数要素の初期化子リストを使用して初期化に参加し、暗黙的な変換のみがexplicit
.
したがって、与えられたマルチパラメーターコンストラクターがクラスの値を論理的に表していないことがわかった場合は、それを作成するのが良いと思いますexplicit
(例: コンテナーコンストラクターを に設定し(size_t size, T defaultValue)
、explicit
のコンストラクターを非明示的に設定します) .pair
(T first, U second)
よくわかりませんが、コピー コンストラクターがexplicit
. それ以外は大丈夫だと思います。
実行時のパフォーマンスに違いはありません。コンパイル時間の差は検出できない可能性があります。
すべてのコンストラクターを arguments で宣言しても害はないと思いますが、explicit
複数の引数を持つコンストラクターに対して冗長に見える場合があります。
explicit
デフォルトのコンストラクターで型を宣言すると、コレクション型で使用する際に問題が発生する可能性があります。