Скажите, в чем разница если написать T&& вместо std::move?
Вот код:
template
В данном случае так же будет вызван перемещающий оператор = (во всяком случае эффект тот же что и от std::move). Скажите, в чем отличие от варианта строкой ниже с std::move?
Ответ
Согласно Стандарту языка шаблонная функция std::move(T&& t) возвращает
static_cast
Т.е. пока шаблонная функция имеет T& в сигнатуре - разницы Вы не увидите. Но если функция будет принимать T&& аргумент, то результат уже будет иной:
#include
template
";
}
template
";
}
int main() {
int i = 42;
fr(i);
frr(i);
}
Вывод
& 1
&& 0
Происходит это потому, что для frr тип T выводится как int&, и запись вида T&& превращается в int&&&, что в свою очередь снова даёт int&, а не int&&
Мой код использует конструкции из c++17, поэтому если нужно, чтобы он собирался в c++11 надо заменить std::is_same_v
Комментариев нет:
Отправить комментарий