spaceship operatörü
- C++ kursu
- Orta seviye
- Ders 110/116
- 5 dk
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
#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
#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?
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ı
auto ____(const Version& other) const = default;
auto operator<=>(const Version& other) const = default;
Açıklama: operator<=> spaceship operatörüdür.