首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++11 列表初始化:統一初始化語法與窄化轉換檢查

     編輯:關於C++

什麼是列表初始化?

C++11 引入列表初始化(brace initialization),使用花括號 {} 統一初始化語法,適用於所有類型:內置類型、標準庫容器、自定義類等。

基本語法

int a{10};      // 直接列表初始化
int b = {20};   // 拷貝列表初始化
vector v{1,2,3}; // 容器初始化

核心優勢:禁止窄化轉換

當初始值可能導致信息丟失(如 double → int、long double → int、int → char 等)時,列表初始化會編譯報錯,而傳統初始化僅給出警告。

示例:窄化轉換被攔截

long double ld = 3.1415926536;
int a{ld};   // 錯誤:C2397 需要窄化轉換
int b = {ld}; // 錯誤:同左
int c(ld);   // 僅警告 C4244
int d = ld;  // 僅警告 C4244

編譯器拒絕 a 和 b,強制開發者顯式處理精度損失,提高代碼安全性。

其他特性

  • 統一語法:同一語法初始化標量、數組、容器、結構體
  • 最令人困惑的解析:避免 Type var(); 被誤判為函數聲明
  • 自動類型推導:配合 auto 可推導為 std::initializer_list

最佳實踐

  • 優先使用列表初始化 Type var{value};
  • 需窄化轉換時,顯式 static_cast 表明意圖
  • 容器初始化時直接列出元素:vector v{1,2,3};
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved