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

C/C++ টেনারি অপারেটর সম্পর্কে কিছু আকর্ষণীয় পর্যবেক্ষণ


আমরা জানি টেনারি অপারেটর if..else ক্লজের বদলে ব্যবহৃত হয়। এটি ?: দ্বারা ডিনোট করা হয়। '?' সিম্বল if পার্টের সমতুল্য এবং ':' else পার্টের সমতুল্য। নিচের ৩টি প্রোগ্রাম টেনারি অপারেটরের কিছু আকর্ষণীয় পর্যবেক্ষণ ব্যাখ্যা করে।

নিচের প্রোগ্রামটি কোনো এরর ছাড়া কম্পাইল হয়। টেনারি এক্সপ্রেশনের রিটার্ন টাইপ ফ্লোট এক্সপেক্টেড (exp2-এর মতো) এবং exp3 (অর্থাৎ লিটারেল জিরো - ইন্ট টাইপ) ইমপ্লিসিটলি ফ্লোটে কনভার্ট হয়।

#include <iostream>
using namespace std;
int main(){
    int test1 = 0;
    float fvalue = 3.111f;
    cout<< (test1 ? fvalue : 0) << endl;
    return 0;
}

নিচের প্রোগ্রাম কম্পাইল হবে না, কারণ কম্পাইলার টেনারি এক্সপ্রেশনের রিটার্ন টাইপ খুঁজে পায় না বা exp2 (চার অ্যারে) এবং exp3 (ইন্ট) এর মধ্যে ইমপ্লিসিট কনভার্সন উপলব্ধ নয়।

#include <iostream>
using namespace std;
int main(){
    int test1 = 0;
    cout<< test1 ? "A String" : 0 << endl;
    return 0;
}

নিচের প্রোগ্রাম কম্পাইল হতে পারে, কিন্তু রানটাইমে ফেইল করবে। টেনারি এক্সপ্রেশনের রিটার্ন টাইপ টাইপ (char *)-এ বাউন্ডেড, কিন্তু এক্সপ্রেশন ইন্ট রিটার্ন করে, তাই প্রোগ্রাম ফেইল করে। লিটারেলি, প্রোগ্রাম এক্সিকিউশন টাইমে ০তম অ্যাড্রেসের স্ট্রিং প্রিন্ট করার চেষ্টা করে।

#include <iostream>
using namespace std;
int main(){
    int test1 = 0;
    cout << (test1 ? "A String" : 0) << endl;
    return 0;
}

আমরা পর্যবেক্ষণ করতে পারি যে exp2 আউটপুট টাইপ হিসেবে ট্রিট হয় এবং exp3 এক্সিকিউশন টাইমে exp2-তে কনভার্ট হতে পারে। যদি কনভার্সন ইমপ্লিসিট হয় তবে কম্পাইলার কনভার্সনের জন্য স্টাব ইনসার্ট করে। যদি কনভার্সন এক্সপ্লিসিট হয় তবে কম্পাইলার এরর থ্রো করে। যদি কোনো কম্পাইলার এমন এরর মিস করে, তবে প্রোগ্রাম এক্সিকিউশন টাইমে ফেইল করতে পারে।


  1. সি/সি++-এ টার্নারি অপারেটর (?:) বনাম if-else

  2. C/C++-এ কমা অপারেটর (Comma Operator)

  3. C/C++-এ '?' অপারেটর কি করে?

  4. C/C++-এ টার্নারি অপারেটর