উপর 2017-11-11 , আইএসও সি ++ কমিটির গৃহীত ঔষধি Sutter 's প্রস্তাব <=> "মহাকাশযান" তিনপথ তুলনা অপারেটর যে যোগ করা হয় নি নতুন বৈশিষ্ট্য এক হিসাবে সি ++ 20 । ধারাবাহিক তুলনা সুটার শিরোনামের কাগজে , মোরার এবং ব্রাউন নতুন ডিজাইনের ধারণাগুলি প্রদর্শন করে। প্রস্তাবনাটির ওভারভিউয়ের জন্য নিবন্ধের একটি অংশ এখানে দেওয়া হয়েছে:
অভিব্যক্তি একটি <=> খ আয় একটি বস্তু যে তুলনা <0 যদি একটি <b , তুলনা > 0 যদি একটি> খ , এবং তুলনা == 0 যদি a ও b সমান / সমতুল্য।
সাধারণ ক্ষেত্রে: আপনার টাইপ এক্স এর জন্য সমস্ত ধরণের ওয়াইয়ের সাথে সদস্যতার সাথে শব্দার্থক শব্দগুলির সাথে সমস্ত তুলনা লিখতে কেবল লিখুন:
auto X::operator<=>(const Y&) =default;
উন্নত ক্ষেত্রে: আপনার টাইপ এক্স এর জন্য সমস্ত ধরণের ওয়াইয়ের সাথে সমস্ত তুলনা লিখতে , কেবল অপারেটর লিখুন <=> যা একটি ওয়াই লাগে , পছন্দসই হলে সদস্যপদার্থ শব্দার্থার্থ পেতে = ডিফল্ট ব্যবহার করতে পারেন
এবং উপযুক্ত বিভাগের প্রকারটি ফেরত পাবেন:
- যদি আপনার ধরণটি প্রাকৃতিকভাবে <টি সমর্থন করে তবে একটি _র্ডারিং ফিরিয়ে দিন , এবং আমরা দক্ষতার সাথে প্রতিসাম্য তৈরি করব < , > , <= , > = , == , এবং
! = ; অন্যথায় একটি আসতে _equality , এবং আমরা দক্ষতার সঙ্গে প্রতিসম তৈরি করে দেব == এবং ! = ।
- রিটার্ন strong_ যদি আপনার টাইপ জন্য একটি == খ বোঝা চ (ক) == চ (খ) (substitutability, যেখানে চ শুধুমাত্র তুলনা-লক্ষণীয় রাষ্ট্র পাবলিক ব্যবহার প্রবেশযোগ্য সার্চ const সদস্য), অন্যথায় আসতে
weak_ ।
তুলনা বিভাগ
পাঁচটি তুলনামূলক বিভাগগুলি std::
প্রকার হিসাবে সংজ্ঞায়িত করা হয় , যার প্রত্যেকটিতে নিম্নলিখিত বর্ণিত মান থাকে:
+--------------------------------------------------------------------+
| | Numeric values | Non-numeric |
| Category +-----------------------------------+ |
| | -1 | 0 | +1 | values |
+------------------+------+------------+---------------+-------------+
| strong_ordering | less | equal | greater | |
| weak_ordering | less | equivalent | greater | |
| partial_ordering | less | equivalent | greater | unordered |
| strong_equality | | equal | nonequal | |
| weak_equality | | equivalent | nonequivalent | |
+------------------+------+------------+---------------+-------------+
এই ধরণের মধ্যে অন্তর্ভুক্ত রূপান্তরগুলি নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়েছে:
strong_ordering
মান { less
, equal
, greater
} পরোক্ষভাবে ধর্মান্তরিত:
weak_ordering
মান { less
, equivalent
, greater
}
partial_ordering
মান { less
, equivalent
, greater
}
strong_equality
মান { unequal
, equal
, unequal
}
weak_equality
মান { nonequivalent
, equivalent
, nonequivalent
}
weak_ordering
মান { less
, equivalent
, greater
} পরোক্ষভাবে ধর্মান্তরিত:
partial_ordering
মান { less
, equivalent
, greater
}
weak_equality
মান { nonequivalent
, equivalent
, nonequivalent
}
partial_ordering
মান { less
, equivalent
, greater
, unordered
} পরোক্ষভাবে ধর্মান্তরিত:
weak_equality
মান { nonequivalent
, equivalent
, nonequivalent
, nonequivalent
}
strong_equality
মানগুলির সাথে { equal
, unequal
} সুস্পষ্টভাবে রূপান্তরিত করে:
weak_equality
মান সহ equivalent
, nonequivalent
}
ত্রি-উপায়ে তুলনা
<=>
টোকেন আবির্ভাব ঘটে। পুরানো উত্স কোডে অক্ষরের ক্রমটি <=>
টোকেনাইজ করে <= >
। উদাহরণস্বরূপ, X<&Y::operator<=>
এর অর্থ ধরে রাখতে একটি স্থান যুক্ত করা দরকার।
ওভারলোডযোগ্য অপারেটর <=>
একটি ত্রি-উপায়ে তুলনা ফাংশন এবং এর চেয়ে বেশি <
এবং কমের প্রাধান্য রয়েছে <<
। এটি এমন প্রকারের প্রত্যাবর্তন করে যা আক্ষরিকের সাথে তুলনা করা যেতে পারে 0
তবে অন্যান্য রিটার্নের ধরণগুলি যেমন এক্সপ্রেশন টেম্পলেটগুলিকে সমর্থন করার জন্য অনুমোদিত। সমস্ত <=>
অপারেটর ভাষা এবং স্ট্যান্ডার্ড লাইব্রেরিতে সংজ্ঞায়িত 5 বর্ণিত std::
তুলনা বিভাগের ধরণের মধ্যে একটি ফেরত দেয় ।
ভাষার ধরণের জন্য, নিম্নলিখিত অন্তর্নির্মিত <=>
একই ধরণের তুলনা সরবরাহ করা হয়। অন্যথায় উল্লিখিত ব্যতীত সমস্ত কনসটেক্সপ্রস । এই তুলনাগুলি স্কেলার প্রচার / রূপান্তরগুলি ব্যবহার করে ভিন্নজাতীয়ভাবে আহ্বান করা যায় না।
- জন্য
bool
, অবিচ্ছেদ্য এবং পয়েন্টার ধরণের, <=>
প্রত্যাবর্তন strong_ordering
।
- পয়েন্টার ধরণের জন্য, বিভিন্ন সিভি-যোগ্যতা এবং উত্স-থেকে-বেস রূপান্তরগুলিকে একটি সজ্জা অন্তর্নির্মিত প্রার্থনা করার অনুমতি দেওয়া হয়
<=>
, এবং সেখানে অন্তর্নির্মিত ভিন্ন ভিন্ন হয় operator<=>(T*, nullptr_t)
। একই বস্তু / বরাদ্দের সাথে পয়েন্টারের তুলনা কেবল ধ্রুবক প্রকাশ।
- মৌলিক ভাসমান পয়েন্টের ধরণের জন্য,
<=>
রিটার্ন পেতে partial_ordering
এবং বৃহত্তর ভাসমান পয়েন্টের ধরণের যুক্তিগুলি প্রশস্ত করে বিজাতীয়ভাবে আহ্বান করা যেতে পারে।
- গণনার জন্য,
<=>
গণনার অন্তর্নিহিত প্রকারের মতোই ফেরত দেয় <=>
।
- জন্য
nullptr_t
, <=>
রিটার্ন strong_ordering
এবং সর্বদা ফলন equal
।
- অনুলিপিযোগ্য অ্যারেগুলির জন্য,
T[N] <=> T[N]
একই ধরণের T
'গুলি হিসাবে ফেরত দেয় <=>
এবং লিক্সোগ্রাফিকাল এলিমেন্টের তুলনা করে। <=>
অন্যান্য অ্যারে জন্য নেই ।
- কারণ
void
নেই <=>
।
এই অপারেটরের অভ্যন্তরীণ কাজগুলি আরও ভালভাবে বুঝতে, দয়া করে মূল কাগজটি পড়ুন । অনুসন্ধান ইঞ্জিনগুলি ব্যবহার করে আমি এটি সন্ধান করেছি।