tg-me.com/cpp_geek/318
Create:
Last Update:
Last Update:
How to: убираем типы с помощью std::decay_tstd::decay_t
— один из самых полезных type traits в C++. Он имитирует процесс передачи параметра по значению, «разрушая» исходный тип.
🔄 Что именно делает decay_t?
• Убирает cv-квалификаторы
• Превращает ссылки в соответствующие типы без ссылок
• Преобразует массивы в указатели
• Преобразует функции в указатели на функции
💻 Пример:
#include <type_traits>
#include <iostream>
int main() {
// const int& -> int
static_assert(std::is_same_v<std::decay_t<const int&>, int>);
// int[10] -> int*
static_assert(std::is_same_v<std::decay_t<int[10]>, int*>);
// void(int) -> void(*)(int)
static_assert(std::is_same_v<std::decay_t<void(int)>, void(*)(int)>);
std::cout << "All assertions passed!" << std::endl;
}
🚀 Где это используется?
• В шаблонном программировании для упрощения работы с типами
• В std::make_shared и std::make_unique для определения типа создаваемого объекта
• При написании обобщенного кода, где нужна правильная дедукция типов
🔍 И да, название «decay» («разрушение») действительно отражает суть — тип «разрушается» до базового представления!
➡️ @cpp_geek
BY C++ geek

Share with your friend now:
tg-me.com/cpp_geek/318