C 11 の導入により、開発者はクラスを初期化するための新しい構文オプションのセットを取得し、既存の構文オプションに追加しました。中かっこで囲まれたイニシャライザ。この選択肢が多すぎると、困惑するジレンマが生じます。各構文オプションをいつ使用するか?
提供されているガイドラインは、オブジェクトに正確な値を割り当てることが目的である場合、次のことを示唆しています。 、コピー初期化 (=) を優先する必要があります。これは、潜在的に異なるセマンティクスを持つ明示的なコンストラクターを誤って呼び出すリスクを最小限に抑えるためです。コピーの初期化が利用できない場合は中かっこの初期化を検討する必要があり、かっこの初期化は最後の手段として使用する必要があります。
中かっこの初期化は、目的の複数の値で初期化する場合に優れています。オブジェクト内に保存されます。この構文は、ベクトル、配列、および複素数に特に適しています。
初期化中に提供される値が、オブジェクトの実際のデータではなく、意図された状態や動作を記述する場合、括弧による初期化を使用する必要があります。これは、サイズやファイル名を指定する引数の場合によく発生します。
次のコード スニペットを考えてみましょう。
{ // Example 1
int b(1); // Copy initialization for exact value
int a{1}; // Brace initialization for stored value
int c = 1; // Parentheses initialization for descriptor value (e.g., size)
int d = {1}; // Brace initialization for stored value
}
{ // Example 4
std::function a(std::plus()); // Copy initialization for callback function
std::function b{std::plus()}; // Brace initialization for callback function, likely unwanted
}
提案されたガイドラインに従うことで、開発者は自信を持って C 11 イニシャライザ構文の複雑さをナビゲートでき、コードの正確さと効率性を確保できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3