Russian Qt Forum
Апрель 25, 2024, 11:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не совсем понятно зачем нужна функция remove_reference?  (Прочитано 1404 раз)
artur567297@gmail.com
Новичок

Offline Offline

Сообщений: 7


Просмотр профиля
« : Июль 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; -  такая инструкция вызывает ошибку компиляции.
Записан
artur567297@gmail.com
Новичок

Offline Offline

Сообщений: 7


Просмотр профиля
« Ответ #1 : Июль 23, 2022, 01:28 »

Вопрос решен: int i_t_3 = static_cast<typename std::remove_reference<decltype(i_temp)>::type>(i_temp) - remove_reference преобразует только тип а я думал полностью возвращает переменную
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.042 секунд. Запросов: 22.