CodeBlanks Logo Icon CodeBlanks

decay ve remove_reference

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

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

// CleanType şablonunu yaz

int main() {
    // Sonucu yazdır
    return 0;
}

Örnek çözüm

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

Soru
template <typename T>
using Clean = std::____<T>;
Cevap
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)

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