Özet - Modern C++
- C++ kursu
- İleri seviye
- Ders 6/83
- 5 dk
structured bindings, concepts ve ranges'i birleştirerek bir veri işleme hattı yazarsın.
Özet - Modern C++
Bu grupta C++17 ve C++20'nin beş önemli aracını gördün: std::optional ile güvenli dönüş, structured bindings ile çoklu değer açma, if constexpr ile derleme zamanı dallar, concepts ile şablon kısıtları ve ranges ile composable görünümler.
Bu araçlar birlikte daha güvenli, daha okunaklı ve daha hızlı kod yazmanı sağlar. Şimdi öğrendiklerini bir araya getirerek küçük bir görev yazacaksın.
Uygulama twice + binding ile özet
template <typename T> auto twice(T x) yaz; gövdede if constexpr ile std::is_integral_v<T> doğruysa x * 2, değilse x döndür. main içinde auto [mn, mx] = std::pair{twice(5), twice(7)}; ile sonuçları bağla ve mn + mx toplamını std::cout ile yazdır.
Başlangıç kodu
#include <iostream>
#include <type_traits>
#include <utility>
// twice şablonunu yaz
int main() {
// Bağla ve toplamı yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <type_traits>
#include <utility>
template <typename T>
auto twice(T x) {
if constexpr (std::is_integral_v<T>) return x * 2;
return x;
}
int main() {
auto [mn, mx] = std::pair{twice(5), twice(7)};
std::cout << mn + mx;
return 0;
}Beklenen çıktı
24
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangi araç şablon parametrelerini kısıtlar?
- std::optional
- concepts Doğru cevap
- ranges
- structured bindings
Açıklama: concepts, requires yan tümcesiyle şablon kısıtları verir.
2 Aracı amacına eşle
| Kavram | Anlamı |
|---|---|
std::optional |
Güvenli dönüş |
structured bindings |
Çoklu açma |
if constexpr |
Derleme zamanı dal |
ranges |
Composable görünüm |
3 if constexpr satırını tamamla
template <typename T>
auto twice(T x) {
____ (std::is_integral_v<T>) return x * 2;
return x;
}
template <typename T>
auto twice(T x) {
if constexpr (std::is_integral_v<T>) return x * 2;
return x;
}
Açıklama: if constexpr derleme zamanı daldır.