CodeBlanks Logo Icon CodeBlanks

Compound requirement

compound requirement ile ifade denetimini öğrenirsin.

Compound requirement nedir?

Compound requirement, bir ifadenin geçerli olmasına ek olarak, dönüş türünü ya da istisna fırlatmamasını da denetler. Yazımı: { ifade } -> concept;.

Örnek: { a.foo() } -> std::convertible_to<int>;. Bu, a.foo() çağrısının geçerli olmasını ve dönüş değerinin int'e çevrilebilir olmasını ister. Böylece yalnızca ifadenin derlendiği değil, türün de doğru olduğu garanti altına alınır. Compound requirement, requires expression gövdesinde kullanılır.

noexcept compound

Compound requirement'a noexcept eklersen, ifadenin istisna fırlatmayacağını garanti etmesini istersin: { a.foo() } noexcept;.

Böyle bir denetim, kaynak yönetimi açısından kritiktir. Örnek: bir yıkıcı (destructor) istisna fırlatmamalı; bunu concept düzeyinde garanti etmek istersen { a.~T() } noexcept; yazarsın. Bu sayede türler, derleme zamanında güvenlik sözleşmesi imzalamış olur. Hata yönetimi bu seviyede şablonlara taşınınca, programın sağlamlığı artar.

Uygulama NothrowDestructible concept'ini tanımla

NothrowDestructible concept'ini tanımla: requires(T a) { { a.~T() } noexcept; } gövdesini kullansın. main içinde static_assert(NothrowDestructible<int>); ile sına ve std::cout ile "Nothrow testi geçti" yaz.

Başlangıç kodu

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

// NothrowDestructible concept'ini buraya tanımla

int main() {
    // int için test et ve mesaj yaz
    return 0;
}

Örnek çözüm

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

template<typename T>
concept NothrowDestructible = requires(T a) {
    { a.~T() } noexcept;
};

int main() {
    static_assert(NothrowDestructible<int>);
    std::cout << "Nothrow testi geçti";
    return 0;
}

Beklenen çıktı

Nothrow testi geçti

Soru ve cevaplar

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

1 Dönüş türü denetimi

Soru
{ a.foo() } ____ std::convertible_to<int>;
Cevap
{ a.foo() } -> std::convertible_to<int>;

Açıklama: compound requirement'ta dönüş türü '->' ile belirtilir.

2 Compound requirement parçaları

Kavram Anlamı
{ expr } İfade denetimi
-> concept Dönüş türü kısıtı
noexcept İstisna fırlatmaz
requires(T a) Parametre bağlamı

3 { expr } noexcept ne anlama gelir?

  • İfade çalışma zamanında denetlenir
  • İfade her zaman true döndürür
  • İfade yalnızca integral tür döndürür
  • İfade istisna fırlatmayacağını garanti eder Doğru cevap

Açıklama: noexcept compound, ifadenin istisna fırlatmayacağını derleme zamanında şart koşar.

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