CodeBlanks Logo Icon CodeBlanks

spaceship operatörü

C++20 spaceship (<=>) operatörünü öğrenirsin.

Spaceship operatörü (<=>)

C++20 ile gelen spaceship operatörü (<=>), tek bir fonksiyonla tüm karşılaştırma operatörlerini otomatik üretir. = default yazarsan derleyici üyeleri sırayla karşılaştırır.

Örnek: auto operator<=>(const Version&) const = default;. Bu tek satır, ==, !=, <, <=, >, >= operatörlerinin hepsini üretir. #include <compare> başlığı gerekir. = default yerine elle gövde de yazabilirsin ama default çoğu durumda yeterlidir. Bu, karşılaştırma kodunu büyük ölçüde azaltır.

default karşılaştırma davranışı

= default ile operator<=>, sınıfın üyelerini beyan sırasıyla karşılaştırır. İlk farklı üyede sonucu verir.

Örnek: class Version { int major; int minor; }; sınıfında önce major karşılaştırılır. Eşitse minor karşılaştırılır. Böylece Version(1, 5) < Version(2, 0) doğru olur çünkü 1 < 2. Version(1, 5) < Version(1, 7) de doğru olur çünkü major eşit ve 5 < 7. Bu davranış, sürüm numaraları gibi hiyerarşik veriler için idealdir.

Uygulama Version sınıfına <=> ekle

Başlangıç kodundaki Version sınıfına spaceship operatörü ekle: auto operator<=>(const Version& other) const = default;. main içinde a < b karşılaştır; küçükse "Küçük", değilse "Büyük" yazdır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <compare>

class Version {
public:
    int major;
    int minor;
    Version(int maj, int min) : major(maj), minor(min) {}
    // Karşılaştırma operatörünü ekle
};

int main() {
    Version a(1, 0);
    Version b(2, 0);
    // Karşılaştır ve sonucu yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <compare>

class Version {
public:
    int major;
    int minor;
    Version(int maj, int min) : major(maj), minor(min) {}
    auto operator<=>(const Version& other) const = default;
};

int main() {
    Version a(1, 0);
    Version b(2, 0);
    if (a < b) {
        std::cout << "Küçük";
    } else {
        std::cout << "Büyük";
    }
    return 0;
}

Beklenen çıktı

Küçük

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Parçayı rolüne eşle

Kavram Anlamı
<=> Spaceship operatörü
= default Otomatik üretim
#include <compare> Başlık dosyası
auto Dönüş türü çıkarsama

2 operator<=> kaç operatörü üretir?

main.cpp
auto operator<=>(const Version&) const = default;
  • Altı Doğru cevap
  • İki
  • Bir
  • On

Açıklama: <=> ==, !=, <, <=, >, >= olmak üzere altı operatörü üretir.

3 Spaceship operatörü imzası

Soru
auto ____(const Version& other) const = default;
Cevap
auto operator<=>(const Version& other) const = default;

Açıklama: operator<=> spaceship operatörüdür.

Orta seviye bölümündeki tüm dersler