โดยทั่วไปการคัดลอกและวางจาก Bjarne Stroustrup ของ"The C ++ Programming Language 4th Edition" :
รายการเริ่มต้นไม่อนุญาตให้แคบลง (§iso.8.5.4) นั่นคือ:
- จำนวนเต็มไม่สามารถแปลงเป็นจำนวนเต็มที่ไม่สามารถเก็บค่าได้ ตัวอย่างเช่นอนุญาตให้ใช้ char ถึง int แต่ไม่อนุญาตให้ใช้ถ่าน
- ค่าจุดลอยตัวไม่สามารถแปลงเป็นชนิดจุดลอยตัวอื่นที่ไม่สามารถเก็บค่าได้ ตัวอย่างเช่นอนุญาตให้ใช้ float เพื่อ double แต่ไม่อนุญาตให้ double ลอย
- ค่า floating-point ไม่สามารถแปลงเป็นชนิดจำนวนเต็มได้
- ค่าจำนวนเต็มไม่สามารถแปลงเป็นชนิดทศนิยมได้
ตัวอย่าง:
void fun(double val, int val2) {
int x2 = val; // if val==7.9, x2 becomes 7 (bad)
char c2 = val2; // if val2==1025, c2 becomes 1 (bad)
int x3 {val}; // error: possible truncation (good)
char c3 {val2}; // error: possible narrowing (good)
char c4 {24}; // OK: 24 can be represented exactly as a char (good)
char c5 {264}; // error (assuming 8-bit chars): 264 cannot be
// represented as a char (good)
int x4 {2.0}; // error: no double to int value conversion (good)
}
เพียงสถานการณ์ที่ = เป็นที่ต้องการมากกว่า {} คือเมื่อใช้auto
คำหลักที่จะได้รับชนิดที่กำหนดโดยการเริ่มต้น
ตัวอย่าง:
auto z1 {99}; // z1 is an int
auto z2 = {99}; // z2 is std::initializer_list<int>
auto z3 = 99; // z3 is an int
ข้อสรุป
ต้องการการเริ่มต้น {} มากกว่าทางเลือกอื่นเว้นแต่คุณจะมีเหตุผลที่ดีที่จะไม่ทำ
auto
?