Compound requirement
- C++ kursu
- İleri seviye
- Ders 64/83
- 5 dk
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
#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
#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
{ a.foo() } ____ std::convertible_to<int>;
{ 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.