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::less
ilk girilen değer daha az ise ikinci değerden.strong_ordering::greater
ilk girilen değer daha fazlaysa ikinci değerden.strong_ordering::equal
değerler birbirine eşitse.
Eğer girilen değer float
ise;
partial_ordering::less
ilk girilen değer daha az ise ikinci değerden.partial_ordering::greater
ilk girilen değer daha fazlaysa ikinci değerden.partial_ordering::equivalent
değerler birbirine eşitse.partial_ordering::unordered
Eğ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; }