CodeBlanks Logo Icon CodeBlanks

Standard concepts

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

main.cpp
#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

main.cpp
#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ı

Soru
template<____ T> T square(T x) { return x * x; }
Cevap
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.

İleri seviye bölümündeki tüm dersler