ตอนนี้เรามี C ++ 11 พร้อมคุณสมบัติใหม่มากมาย อันใหม่ที่น่าสนใจและสับสน (อย่างน้อยสำหรับฉัน) คือสิ่งใหม่nullptrเป็นใหม่
ไม่จำเป็นสำหรับแมโครที่น่ารังเกียจอีกต่อไปNULLแล้ว
int* x = nullptr;
myclass* obj = nullptr;
ถึงกระนั้นฉันก็ยังไม่ได้nullptrผล ตัวอย่างเช่นบทความ Wikipediaพูดว่า:
C ++ 11 แก้ไขสิ่งนี้โดยการแนะนำคำสำคัญใหม่เพื่อใช้เป็นค่าคงที่ตัวชี้โมฆะที่แตกต่าง: nullptr มันเป็นประเภท nullptr_tซึ่งสามารถแปลงได้โดยปริยายและสามารถเทียบได้กับชนิดตัวชี้หรือชนิดตัวชี้ไปยังสมาชิก มันไม่สามารถเปลี่ยนแปลงได้โดยปริยายหรือเทียบเคียงได้กับชนิดอินทิกรัลยกเว้นสำหรับบูล
มันเป็นคำหลักและตัวอย่างของประเภทได้อย่างไร
นอกจากนี้คุณยังมีตัวอย่างอีก (นอกเหนือจาก Wikipedia) ซึ่งnullptrดีกว่าเก่า0หรือไม่
nullptr_tรับประกันว่าจะมีเพียงสมาชิกคนหนึ่งnullptr? ดังนั้นหากฟังก์ชั่นกลับมาnullptr_tแล้วคอมไพเลอร์รู้อยู่แล้วว่าค่าใดจะถูกส่งกลับโดยไม่คำนึงถึงเนื้อหาของฟังก์ชัน?
std::nullptr_tสามารถ instantiated แต่ทุกกรณีจะเหมือนกับเพราะประเภทถูกกำหนดให้เป็นnullptr typedef decltype(nullptr) nullptr_tฉันเชื่อว่าเหตุผลหลักที่มีอยู่ประเภทคือฟังก์ชั่นสามารถโหลดมากเกินไปโดยเฉพาะเพื่อจับnullptrถ้าจำเป็น ดูที่นี่สำหรับตัวอย่าง
nullptrนอกจากนี้ยังใช้เพื่อแสดงการอ้างอิงแบบ null สำหรับการจัดการที่จัดการใน C ++ / CLI