Название: Не совсем понятно зачем нужна функция remove_reference? Отправлено: artur567297@gmail.com от Июль 22, 2022, 23:18 Здравствуйте, не совсем понятно зачем нужна функция remove_reference? В описание написано std::remove_reference<> - превращает ссылочный тип в соответствующий нессылочный (типовой член шаблона type). Как я понимаю удаляет все ссылки из переменной и приводит ее к обычному (первоначальному) типу то есть если одна переменная ссылается на другую тогда выражение std::remove_reference должно удалить в ней эти ссылки - но однако так не получается
вот пример кода: int i = 5; int& i_t = i; std::remove_reference<decltype(i_t)>::type; i_t = 9; cout << i << endl; // - ЗДЕСЬ ПОСЛЕ ПРИМЕНЕНИЯ remove_reference ПЕРЕМЕННАЯ i_t ВСЕ РАВНО ССЫЛАЕТСЯ НА ПЕРЕМЕННУЮ i. И еще два примера кода (один рабочий, другой нет) : Рабочий код (переменная int&& преобразовывается к типу int) std::cout << std::is_same<int, std::remove_reference<int&&>::type>::value << '\n'; Не рабочий код (переменная int&& не преобразовывается по чему то к типу int): int &&i_temp = 8; std::remove_reference<decltype(i_temp)>::type; std::cout << std::is_same<int, decltype(i_temp)>::value << '\n'; // - В этом коде переменная как была временной так и осталось, типом int не стало. И вообще не //понятно куда сохранить результаты вызова remove_reference? На пример если по пробовать сохранить так: auto i_temp_2 = std::remove_reference<decltype(i_temp)>::type; - такая инструкция вызывает ошибку компиляции. Название: Re: Не совсем понятно зачем нужна функция remove_reference? Отправлено: artur567297@gmail.com от Июль 23, 2022, 01:28 Вопрос решен: int i_t_3 = static_cast<typename std::remove_reference<decltype(i_temp)>::type>(i_temp) - remove_reference преобразует только тип а я думал полностью возвращает переменную
|