Uzay Gemisi Operatörü – Üçlü Karşılaştırıcı (<=>) C++20

84 Kişi Okudu

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; }

Yayınlayan

Ahmet Yasin CİVAN

Mekatronik Mühendisi, Gömülü Yazılım Geliştiricisi.