Default-initializationเป็นคำที่มาจาก Standard ซึ่งอาจหมายความว่าไม่มีการเริ่มต้นเลยดังนั้นคุณอาจหมายถึงzero-initializationเป็นศูนย์การเริ่มต้น
คำอธิบายใน cppreference.com นั้นทำให้เข้าใจผิดเล็กน้อย std::array
เป็นคลาสรวมและถ้าประเภทองค์ประกอบเป็นแบบดั้งเดิมก็คือ POD: "ข้อมูลเก่าล้วน" โดยมีความหมายใกล้เคียงกับภาษา C ตัวสร้างที่กำหนดโดยนัยของstd::array< int, N >
เป็นเรื่องเล็กน้อยที่ไม่ซึ่งไม่ได้ทำอะไรเลย
ไวยากรณ์ที่เหมือนstd::array< int, 3 >()
หรือstd::array< int, 3 > x{}
ที่ให้ค่าเป็นศูนย์ไม่สามารถทำได้โดยการเรียกใช้ตัวสร้าง การได้ศูนย์เป็นส่วนหนึ่งของการกำหนดค่าเริ่มต้นที่ระบุใน C ++ 11 §8.5 / 8:
ในการกำหนดค่าเริ่มต้นวัตถุประเภท T หมายถึง:
- ถ้า T เป็นประเภทคลาส (อาจมีคุณสมบัติเป็น cv) โดยไม่มีตัวสร้างเริ่มต้นที่ผู้ใช้ระบุหรือถูกลบออกไปวัตถุนั้นจะเริ่มต้นเป็นศูนย์ ... และถ้า T มีตัวสร้างเริ่มต้นที่ไม่สำคัญอ็อบเจ็กต์จะถูกกำหนดค่าเริ่มต้นโดยปริยาย
std::array
ไม่มีตัวสร้างเริ่มต้นที่ผู้ใช้ระบุดังนั้นจึงได้รับค่าเริ่มต้นเป็นศูนย์ มันมีคอนสตรัคเตอร์เริ่มต้นที่กำหนดไว้โดยปริยาย แต่เป็นเรื่องเล็กน้อยดังนั้นจึงไม่ถูกกำหนดค่าเริ่มต้นโดยปริยาย (แต่สิ่งนี้ไม่ได้สร้างความแตกต่างเนื่องจากการกำหนดค่าเริ่มต้นเล็กน้อยตามคำจำกัดความไม่มีผลในรันไทม์)
ถ้าไม่มีมีไวยากรณ์ที่จะใช้กับอาร์เรย์ทั้งหมด (รวมถึงอาร์เรย์ขนาดศูนย์) เพื่อเริ่มต้นองค์ประกอบทั้งหมดเป็นค่าเริ่มต้นหรือไม่
อาร์เรย์แบบ C และstd::array
มีทั้งมวลรวมและวิธีการที่จะสมบูรณ์เป็นศูนย์เริ่มต้นใด ๆ = {}
รวมอยู่กับไวยากรณ์ สิ่งนี้ใช้ได้ตั้งแต่ C ++ 98 โปรดสังเกตว่าอาร์เรย์สไตล์ C ต้องไม่มีขอบเขตเป็นศูนย์และนั่นsizeof (std::array< X, 0 >)
ไม่ใช่ศูนย์
T x[N]
ไวยากรณ์