আমি বর্তমানে সি ++ প্রিমার বইটি দিয়ে সি ++ শিখছি এবং বইটির একটি অনুশীলন হ'ল:
নিম্নলিখিত অভিব্যক্তিটি কী তা ব্যাখ্যা করুন:
someValue ? ++x, ++y : --x, --y
আমরা কী জানি? আমরা জানি যে কলামা অপারেটরের চেয়ে টের্নারি অপারেটরের উচ্চতর প্রাধান্য রয়েছে। বাইনারি অপারেটরগুলির সাথে এটি বোঝা বেশ সহজ ছিল, তবে টার্নারি অপারেটরের সাথে আমি কিছুটা লড়াই করছি। বাইনারি অপারেটরগুলির সাথে "উচ্চতর প্রাধান্য থাকা" এর অর্থ হ'ল আমরা উচ্চতর প্রাধান্য সহ অভিব্যক্তিটির চারপাশে প্রথম বন্ধনী ব্যবহার করতে পারি এবং এটি কার্যকর করে পরিবর্তন করে না।
টার্নারি অপারেটরের জন্য আমি এটি করব:
(someValue ? ++x, ++y : --x, --y)
কার্যকরভাবে একই কোডটির ফলে ফলাফল তৈরি হয় যা সংকলক কোডটি কীভাবে গ্রুপবদ্ধ করবে তা বুঝতে আমাকে সহায়তা করে না।
তবে, একটি সি ++ সংকলক দিয়ে পরীক্ষা করা থেকে আমি জানি যে এক্সপ্রেশনটি সংকলন করে এবং কোনও :
অপারেটর নিজে থেকে কী দাঁড়াতে পারে তা আমি জানি না । সুতরাং সংকলকটি টেরিনারি অপারেটরটিকে সঠিকভাবে ব্যাখ্যা করে বলে মনে হচ্ছে।
তারপরে আমি প্রোগ্রামটি দুটিভাবে সম্পাদন করেছি:
#include <iostream>
int main()
{
bool someValue = true;
int x = 10, y = 10;
someValue ? ++x, ++y : --x, --y;
std::cout << x << " " << y << std::endl;
return 0;
}
ফলাফল স্বরূপ:
11 10
অন্যদিকে someValue = false
এটি মুদ্রণ করে:
9 9
সি ++ সংকলক কেন কোড তৈরি করবে যে টের্নারি অপারেটরের সত্যিকারের শাখার জন্য কেবল বৃদ্ধি হয় x
, যখন ত্রৈমাসীর মিথ্যা শাখার জন্য এটি উভয়ই হ্রাস পায় x
এবং y
?
আমি এমনকি সত্য-শাখার চারপাশে প্রথম বন্ধনী স্থাপন করা পর্যন্ত গিয়েছিলাম:
someValue ? (++x, ++y) : --x, --y;
কিন্তু এটি এখনও ফলাফল 11 10
।
?
হয় শর্তসাপেক্ষ অপারেটর । টেরিনারি অপারেটর শব্দটির অর্থ তিনটি সংযোজনযুক্ত অপারেটর। শর্তসাপেক্ষ অপারেটরটি টেরিনারি অপারেটরের একটি উদাহরণ , তবে কোনও ভাষায় (তাত্ত্বিকভাবে) একাধিক ত্রিনিরি অপারেটর থাকতে পারে।