共用方式為


警告 C26475

請勿使用函式樣式 C-casts。

C++ 核心指導方針 ES.49 :如果您必須使用轉換,請使用具名轉換

函式樣式轉換(例如 int(1.1) ,)是另一種 C 樣式轉換(例如 (int)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 };