เกิดข้อผิดพลาดอย่างชัดเจนกล่าวว่าสร้างเริ่มต้นได้ถูกลบไปแล้วโดยปริยาย มันยังบอกว่าทำไม: คลาสมีตัวแปร const ที่ไม่คงที่ซึ่งจะไม่เริ่มต้นโดย ctor เริ่มต้น
class X {
const int x;
};
เนื่องจากX::x
เป็นconst
ค่าเริ่มต้น - แต่ ctor เริ่มต้นจะไม่เริ่มต้นตามปกติ (เนื่องจากเป็นประเภท POD) ดังนั้นในการรับ ctor เริ่มต้นคุณต้องกำหนดด้วยตัวเอง (และต้องเริ่มต้นx
) คุณจะได้รับสถานการณ์เดียวกันกับสมาชิกที่เป็นข้อมูลอ้างอิง:
class X {
whatever &x;
};
อาจเป็นที่น่าสังเกตว่าทั้งสองอย่างนี้จะปิดใช้งานการสร้างตัวดำเนินการมอบหมายโดยปริยายเช่นกันด้วยเหตุผลเดียวกัน โดยปกติแล้วตัวดำเนินการกำหนดโดยนัยจะทำการมอบหมายสมาชิกที่ชาญฉลาด แต่สำหรับสมาชิก const หรือสมาชิกอ้างอิงจะไม่สามารถทำเช่นนั้นได้เนื่องจากไม่สามารถกำหนดสมาชิกได้ ในการทำงานที่ได้รับมอบหมายคุณต้องเขียนตัวดำเนินการมอบหมายของคุณเอง
นี่คือเหตุผลที่โดยทั่วไปconst
สมาชิกควรเป็นแบบคงที่เมื่อคุณทำการมอบหมายคุณจะไม่สามารถกำหนดสมาชิก const ได้ ในกรณีทั่วไปอินสแตนซ์ทั้งหมดของคุณจะมีค่าเท่ากันดังนั้นจึงอาจแชร์การเข้าถึงตัวแปรเดียวแทนการมีสำเนาของตัวแปรจำนวนมากซึ่งทั้งหมดจะมีค่าเท่ากัน
เป็นไปได้แน่นอนที่จะสร้างอินสแตนซ์ที่มีค่าต่างกัน - คุณ (เช่น) ส่งค่าเมื่อคุณสร้างวัตถุดังนั้นวัตถุที่แตกต่างกันสองค่าจึงมีค่าที่แตกต่างกันสองค่า อย่างไรก็ตามหากคุณพยายามทำอะไรบางอย่างเช่นการแลกเปลี่ยนสมาชิก const จะยังคงรักษาค่าเดิมไว้แทนที่จะถูกสลับ