Standard concepts
- C++ kursu
- İleri seviye
- Ders 63/83
- 5 dk
standard concepts (Integral, FloatingPoint) öğrenirsin.
Standard concepts
C++20, <concepts> başlığında sık kullanılan concept'leri hazır getirir. En bilinenleri: std::integral, std::floating_point, std::signed_integral, std::unsigned_integral, std::convertible_to, std::same_as ve std::copyable.
Bunları kullanarak şablon kısıtlarını sıfırdan yazmak zorunda kalmazsın. Örnek: template<std::integral T> T sum(T a, T b). Burada T yalnızca integral (int, long, char, ...) türleri kabul eder. Bu kısa yazım, requires std::integral<T> ile aynı anlama gelir.
Integral ve FloatingPoint
std::integral ve std::floating_point, sayısal işlemlerde en sık kullanılan iki concept'tir. Bir şablon fonksiyonu yalnızca tam sayı ya da yalnızca ondalık sayı kabul etsin diyorsan bunları kullanırsın.
Örnek: template<std::floating_point T> T average(T a, T b) { return (a + b) / T{2}; }. Bu fonksiyon int ile çağrıldığında derleme hatası verir; çünkü int bir floating_point değildir. Böylece tür hataları çalışma zamanında değil, derleme zamanında yakalanır.
Uygulama integral kısıtlı sum fonksiyonu
template<std::integral T> T sum(T a, T b) şablon fonksiyonunu yaz; gövdesi return a + b; olsun. main içinde sum(3, 4) çağrısının sonuçunu std::cout ile yaz.
Başlangıç kodu
#include <iostream>
#include <concepts>
// sum şablon fonksiyonunu buraya yaz
int main() {
// sum çağrısının sonuçunu yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <concepts>
template<std::integral T>
T sum(T a, T b) {
return a + b;
}
int main() {
std::cout << sum(3, 4);
return 0;
}Beklenen çıktı
7
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Concept'i açıklamasıyla eşle
| Kavram | Anlamı |
|---|---|
std::integral |
Tam sayı türleri |
std::floating_point |
Ondalık türler |
std::same_as |
Aynı tür vurgusu |
std::copyable |
Kopyalanabilir tür |
2 std::integral kısıtı
template<____ T> T square(T x) { return x * x; }
template<std::integral T> T square(T x) { return x * x; }
Açıklama: std::integral kısıtı yalnızca tam sayı türleri kabul eder.
3 std::integral<int> doğru mudur?
- Evet, int bir integral türdür Doğru cevap
- Yalnızca unsigned int için doğrudur
- Hayır, int integral değildir
- Yalnızca long için doğrudur
Açıklama: int, long, char, short gibi türler std::integral koşulunu sağlar.