19

explicit数回、コードをリファクタリングするときに、以前のパラメーターなしのコンストラクターにパラメーターを追加したり、以前のマルチパラメーターコンストラクターからパラメーターを削除したりするときに、キーワードを追加するのを忘れました。explicitこれを防ぐために、引数がいくつあっても、すべてのコンストラクターにマークを付ける習慣があります。(もちろん、私が実際に暗黙の変換を必要とするコンストラクターを除いて。)

これにはマイナス面がありますか?パフォーマンス?コンパイル時間?

4

3 に答える 3

15

欠点はありません。C++0x では、マルチパラメーター コンストラクターは、複数要素の初期化子リストを使用して初期化に参加し、暗黙的な変換のみがexplicit.

したがって、与えられたマルチパラメーターコンストラクターがクラスの値を論理的に表していないことがわかった場合は、それを作成するのが良いと思いますexplicit(例: コンテナーコンストラクターを に設定し(size_t size, T defaultValue)explicitのコンストラクターを非明示的に設定します) .pair(T first, U second)

于 2011-04-18T13:31:27.277 に答える
9

よくわかりませんが、コピー コンストラクターがexplicit. それ以外は大丈夫だと思います。

于 2011-04-18T13:24:15.167 に答える
4

実行時のパフォーマンスに違いはありません。コンパイル時間の差は検出できない可能性があります。

すべてのコンストラクターを arguments で宣言しても害はないと思いますが、explicit複数の引数を持つコンストラクターに対して冗長に見える場合があります。

explicitデフォルトのコンストラクターで型を宣言すると、コレクション型で使用する際に問題が発生する可能性があります。

于 2011-04-18T13:18:46.047 に答える