كلمة nullptr في C++: لماذا هي أفضل من NULL وكيفية استخدامها بشكل صحيح
مرحباً بالجميع. لقد بدأت تعلم C++ مؤخراً، وحدث لدي ارتباك بخصوص المؤشرات الفارغة. في الكتب القديمة والمنتديات غالباً ما يُكتب NULL، بينما في الأمثلة الجديدة أرى nullptr. يبدو أن كلاهما يعني "لا شيء" للمؤشر، لكن المترجم أحياناً يشتكي من NULL.
إليك مثال أربكني. كتبت دالة تأخذ مؤشراً إلى int:
void print(int* ptr) {
if (ptr == NULL) {
std::cout << "المؤشر فارغ" << std::endl;
} else {
std::cout << *ptr << std::endl;
}
}
void print(int value) {
std::cout << "عدد صحيح: " << value << std::endl;
}
عندما استدعيت print(NULL)، أصدر المترجم (GCC مع العلم -std=c++17) تحذيراً أو حتى خطأ، قائلاً إن الاستدعاء غير واضح. لكن عندما كتبت print(nullptr)، عمل كل شيء بشكل مثالي وتم استدعاء النسخة الخاصة بالمؤشر.
الشرح