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_listType var{value};static_cast 表明意圖vector v{1,2,3};