কম্পিউটার টিউটোরিয়াল

C++-এ nullptr কী এবং কেন ব্যবহার করা উচিত?

C++11-এ introdujo nullptr - একটি টাইপ-সেফ নাল পয়েন্টার লিটারেল। পুরানো `NULL` (সাধারণত `#define NULL 0` বা `(void*)0`) এর সমস্যা সমাধান করে।

NULL-র সমস্যা: অ্যাম্বিগুইটি

void func(int n) { cout << "int overload"; }
void func(char* ptr) { cout << "char* overload"; }

int main() {
    func(NULL); // Error: ambiguous! NULL হলো 0 (int) বা (void*)0
}

nullptr-র সমাধান

int main() {
    func(nullptr); // OK: char* overload কল হয়
    // nullptr_t টাইপ, যেকোনো পয়েন্টার টাইপে ইমপ্লিসিট কনভার্ট হয়, কিন্তু ইন্টিগার টাইপে নয়
}

আউটপুট

calling function my_func(char *)

nullptr-এর বৈশিষ্ট্য

  • টাইপ: std::nullptr_t (প্রিন্ট করতে typeid(nullptr).name())
  • যেকোনো পয়েন্টার টাইপে ইমপ্লিসিট কনভার্ট হয় (`int*`, `char*`, `MyClass*`, `void*` ইত্যাদি)
  • ইন্টিগার টাইপে (int, long, bool) কনভার্ট হয় না
  • বুলিয়ান কনটেক্সটে `false`-এ কনভার্ট হয়
  • সাইজ: পয়েন্টার সাইজের সমান (৪ বা ৮ বাইট)

সেরা অনুশীলন

  • সর্বদা `NULL` বা `0` এর বদলে `nullptr` ব্যবহার করুন।
  • স্মার্ট পয়েন্টার (unique_ptr, shared_ptr) ডিফল্ট কনস্ট্রাক্টরে `nullptr` ধারণ করে।
  • টেমপ্লেট কোডে `nullptr` ব্যবহার করলে টাইপ ডেডাকশন সঠিক হয়।
  1. C++-এ মিডি'র থিওরেম (Midy's Theorem)

  2. সি++-এ ম্যাট্রিক্সের ডিটারমিন্যান্ট

  3. C++-এ Range Addition: অ্যারে রেঞ্জ আপডেট দিয়ে মডিফাইড অ্যারে বের করা

  4. C++-এ Line Reflection: ২D প্লেনে বিন্দুগুলোর Y-অক্ষ সমান্তরাল প্রতিফলন লাইন আছে কিনা যাচাই করা