次の方法で共有


警告 C26475

関数の C スタイルのキャストは使用しないでください。

C++ Core Guidelines: ES.49: キャストを使用する必要がある場合は、名前付きキャストを使用します

関数スタイルのキャスト (たとえば、 int(1.1)) は、安全性が疑わしい C スタイルのキャスト ( (int)1.1 など) のもう 1 つの形式です。 具体的には、コンパイラは、C キャストまたは関数キャストでデータ損失が発生する可能性があるかどうかを確認しようとしません。 どちらの場合も、キャストを避けるか、可能な場合はブレース初期化子を使用することをお勧めします。 どちらも機能しない場合は、静的キャストが適している可能性がありますが、ガイドライン サポート ライブラリのユーティリティを使用することをお勧めします。

  • gsl::narrow は、無損失変換を保証し、不可能な場合は gsl::narrowing_error をスローします。
  • gsl::narrow_cast 変換によってデータが失われる可能性があり、許容できることを明確に示しています。

解説

  • この規則は、プリミティブ型の定数に対してのみ適用されます。 このような場合、コンパイラはデータ損失を明確に検出し、かっこで固定された初期化子を使用するとエラーを生成します。 実行時の実行が必要な場合は、 C26493 NO_CSTYLE_CASTによってフラグが設定されます。

  • 既定の初期化子にはフラグが設定されません (たとえば、 int())。

危険な変換の例:

constexpr auto planck_constant = float( 6.62607004082e-34 ); // C26475

潜在的なデータ損失を検出する、危険な変換のコンパイラ エラー:

constexpr auto planck_constant = float{ 6.62607004082e-34 }; // Error C2397

危険な変換を修正するには、適切なサイズのプリミティブ型を使用します。

constexpr auto planck_constant = double{ 6.62607004082e-34 };