C ++ 0x จะสร้างโค้ดต่อไปนี้และโค้ดที่คล้ายกันมีรูปแบบไม่ถูกต้องเนื่องจากต้องมีการแปลงที่เรียกว่าการแปลง a double
เป็นint
.
int a[] = { 1.0 };
ฉันสงสัยว่าการเริ่มต้นประเภทนี้ใช้มากในรหัสโลกแห่งความเป็นจริงหรือไม่ การเปลี่ยนแปลงนี้จะเสียรหัสกี่รหัส การแก้ไขในโค้ดของคุณมีความพยายามมากหรือไม่หากโค้ดของคุณได้รับผลกระทบเลย
สำหรับการอ้างอิงโปรดดูที่ 8.5.4 / 6 ของ n3225
Conversion ที่แคบลงคือการแปลงโดยปริยาย
- จากประเภททศนิยมไปยังประเภทจำนวนเต็มหรือ
- จาก long double ไปเป็น double หรือ float หรือจาก double ไปจนถึง float ยกเว้นที่มาคือนิพจน์คงที่และมูลค่าที่แท้จริงหลังการแปลงอยู่ในช่วงของค่าที่สามารถแสดงได้ (แม้ว่าจะไม่สามารถแสดงได้อย่างแน่นอน) หรือ
- จากประเภทจำนวนเต็มหรือประเภทการแจงนับที่ไม่ได้กำหนดขอบเขตเป็นประเภทจุด oating ยกเว้นที่มาเป็นนิพจน์คงที่และมูลค่าที่แท้จริงหลังจากการแปลงจะพอดีกับประเภทเป้าหมายและจะให้ค่าเดิมเมื่อแปลงกลับเป็นประเภทเดิมหรือ
- จากประเภทจำนวนเต็มหรือประเภทการแจงนับที่ไม่ได้กำหนดขอบเขตไปเป็นประเภทจำนวนเต็มที่ไม่สามารถแสดงค่าทั้งหมดของประเภทเดิมได้ยกเว้นที่มาเป็นนิพจน์คงที่และมูลค่าจริงหลังจากการแปลงจะพอดีกับประเภทเป้าหมายและจะสร้างค่าดั้งเดิมเมื่อ แปลงกลับเป็นประเภทเดิม