デフォルトでは、明確に定義された単一引数のコンストラクタ:C ++コア原則C.46

C.46:デフォルトでは、単一引数のコンストラクタを明示的に宣言します

C.46:デフォルトでは明確に定義された単一引数のコンストラクタ

 

 

 

理由(理由)

 

意図しない変換を避けるために。

予期しない変換を避けます。

 

 

例えば、悪い(陰性試料)

 

 

class String {
public:
    String(int);   // BAD
    // ...
};

String s = 10;   // surprise: string of size 10

 

 

 

例外(例外)

 

あなたが本当にクラス型のコンストラクタ引数の型からの暗黙的な変換が必要な場合は、明示的に使用しないでください。

あなたは、明示的なキーワードを使用せずに、暗黙の型の型のようなクラスのコンストラクタのパラメータから変換する必要がない場合。

 

class Complex {
public:
    Complex(double d);   // OK: we want a conversion from d to {d, 0}
    // ...
};

Complex z = 10.7;   // unsurprising conversion

 

参照:暗黙的な変換の議論を

参照:暗黙の型変換についての議論。

議論の暗黙の型変換:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ro-conversion

 

 

 

例外(例外)

 

彼らは変換を実行していないので、コピーや移動のコンストラクタを明示的になされるべきではありません。明示的なコピー/移動コンストラクタは困難値渡しと帰国します。

そして、コピーコンストラクタが明示のように定義すべきではない移動すると、その型変換のために行われてはなりません。明示的に値渡し/移動コンストラクタ引数をコピーし、リターン結果という難しいです。

 

 

施行(提案)

 

(シンプル)単一引数のコンストラクタを明示的に宣言する必要があります。グッド単一の引数非明示的なコンストラクタは、ほとんどのコードベースでは稀です。「ポジティブリスト」に含まれていないこと、すべてのために警告します。

コンストラクタ(シンプル)のユニークなパラメータが明示的として定義する必要があります。明確に定義された非明示的な単一引数のコンストラクタは、コードのほとんどでは稀です。ケース内のすべてのいない「ポジティブリスト」への警告。

 

説明リンク

 

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c46-by-default-declare-single-argument-constructors-explicit


 

私はこの記事は参考になりましだと思いますか?ようこそ親指アップし、より多くの人と共有することができます。

より多くの更新の記事を読む、オブジェクト指向の考え方のマイクロチャンネル公衆数にしてください注意を払います[]

公開された408元の記事 ウォンの賞賛653 ビュー290 000 +

おすすめ

転載: blog.csdn.net/craftsman1970/article/details/104502353