কম্পিউটার

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


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

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

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

নিম্নলিখিত প্রোগ্রামটি কম্পাইল করতে সক্ষম হবে না, কারণ হল কম্পাইলার রিটার্ন টাইপ টার্নারি এক্সপ্রেশন সনাক্ত করতে বা খুঁজে পেতে সক্ষম নয় বা exp2 (char array) এবং exp3 (int) এর মধ্যে অন্তর্নিহিত রূপান্তর অনুপলব্ধ।

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

নিম্নলিখিত প্রোগ্রামটি কম্পাইল করতে সক্ষম হতে পারে, বা রানটাইমে ব্যর্থ হতে পারে। Ternary এক্সপ্রেশনের রিটার্ন টাইপ সীমিত বা টাইপ (char *) এর সাথে আবদ্ধ, তবুও এক্সপ্রেশনটি int প্রদান করে, তাই প্রোগ্রামটি ব্যর্থ হয়। আক্ষরিক অর্থে, প্রোগ্রামটি এক্সিকিউশন টাইম বা রানটাইমে 0ম ঠিকানায় স্ট্রিং প্রিন্ট করার চেষ্টা করে।

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

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


  1. টারনারি অপারেটর?:বনাম যদি…আর সি/সি++ এ

  2. C/C++ এ কমা অপারেটর

  3. কি করে '?' C/C++ এ করবেন?

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