ตอนนี้เรามี 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