decay ve remove_reference
- C++ kursu
- İleri seviye
- Ders 17/83
- 5 dk
decay ve remove_reference ile tür dönüşümü öğrenirsin.
decay ve remove_reference
std::decay_t<T>, bir türden referans, const ve diziyi ayıklar; fonksiyonları işaretçiye dönüştürür. std::decay_t<int&> → int, std::decay_t<const int&> → int, std::decay_t<int[5]> → int*.
std::remove_reference_t<T> yalnızca referansı ayıklar; const ve diziyi bırakır. std::remove_reference_t<int&> → int ama std::remove_reference_t<const int&> → const int. Bu trait'ler, şablon parametrelerini standart biçime sokmak için kullanılır.
Şablon parametrelerinde kullanım
Bir şablon, T&& universal reference aldığında T referans olabilir. Türün ham halini elde etmek için std::decay_t<T> kullanılır. Örnek: template <typename T> struct Store { using value_type = std::decay_t<T>; }; Bu, Store<int&>::value_type'ın int olmasını sağlar.
Standart kütüphane std::tuple, std::function ve std::make_pair gibi araçlarda decay uygulanır. Bu, kullanıcı referansla çağırsa bile saklanan türün referanssız olmasını sağlar. Şablon tasarımında standart bir kalıptır.
Uygulama CleanType şablonunu yaz
template <typename T> struct CleanType yaz. İçinde using type = std::decay_t<T>; olsun. main içinde std::cout << std::is_same_v<CleanType<int&>::type, int>; yaz.
Başlangıç kodu
#include <iostream>
#include <type_traits>
// CleanType şablonunu yaz
int main() {
// Sonucu yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <type_traits>
template <typename T>
struct CleanType {
using type = std::decay_t<T>;
};
int main() {
std::cout << std::is_same_v<CleanType<int&>::type, int>;
return 0;
}Beklenen çıktı
1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 remove_reference satırını tamamla
template <typename T>
using Clean = std::____<T>;
template <typename T>
using Clean = std::remove_reference_t<T>;
Açıklama: remove_reference_t<T> yalnızca referansı ayıklar.
2 decay_t<int&> neyi verir?
- int Doğru cevap
- int&
- const int
- int*
Açıklama: decay_t referansı ve const'ı ayıklar; sonuç int olur.
3 Trait'i sonucuna eşle
| Kavram | Anlamı |
|---|---|
decay_t<int&> |
int (decay) |
decay_t<const int&> |
int (const gitti) |
remove_reference_t<int&> |
int (yalnız ref) |
remove_reference_t<const int&> |
const int (ref gitti) |