Uzay Gemisi Operatörü Nedir?
Cpp 2020 ile gelen yeni özelliklerden bir tanesi de üçlü operatördür, bu operatöre uzay gemisine benzediği için uzay gemisi operatörü de denir. Uzay gemisi operatörü ile üçlü ve daha fazla karşılaştırmalar yapılabilmektedir. Klasik olarak == operatörünü ele alalım, bu operatör kullanıldığında true veya false değerlerinden biri dönecekti, ancak üçlü operatör ile karşılaştırmanın sonucundan daha fazla bilgi edinme şansı ediniyoruz.
Açıklama ve Örnekler
Bu operatör bool olarak true veya false tiplerini dönmez, aksine enum tipleri dönebilir. Eğer karşılaştırma sayısal bir tip için yapılacaksa;
strong_ordering::lessilk girilen değer daha az ise ikinci değerden.strong_ordering::greaterilk girilen değer daha fazlaysa ikinci değerden.strong_ordering::equaldeğerler birbirine eşitse.
Eğer girilen değer float ise;
partial_ordering::lessilk girilen değer daha az ise ikinci değerden.partial_ordering::greaterilk girilen değer daha fazlaysa ikinci değerden.partial_ordering::equivalentdeğerler birbirine eşitse.partial_ordering::unorderedEğer biri veya her ikisi de sayı değilse.
Cpp20 Uzay Gemisi Operatörü (<=>) Kullanımı;
int i { 1453 };
strong_ordering netice { i <=> 0 };
if (netice == strong_ordering::less) { cout << "1453 Küçük 0 dan" << endl; }
if (netice == strong_ordering::greater) { cout << "1453 Büyük 0 dan" << endl; }
if (netice == strong_ordering::equal) { cout << "1453' e eşit" << endl;
Kendi tipleriniz için,
weak_ordering::less: ilk girilen değer daha az ise ikinci değerden.weak_ordering::greater: ilk girilen değer daha fazlaysa ikinci değerden.weak_ordering::equivalent: Equal operands
Karşılaştırmanın sonucunu fonksiyonlar yardımıyla anlamlandırabilirsiniz. Bu fonksiyonlar; std::is_eq() , is_neq() , is_lt() , is_lteq() , is_gt() , ve is_gteq() eğer sonuç doğruysa true sonucu alınır, sırasıyla şunlara karşılık gelir; == , != , < , <= , > , veya >=.
Örneğin:
int i { 11 };
strong_ordering cevap { i <=> 0 };
if (is_lt(cevap)) { cout << "küçük" << endl; }
if (is_gt(cevap)) { cout << "büyük" << endl; }
if (is_eq(cevap)) { cout << "eşit" << endl; }