static_cast другого типа и переместить результат - PullRequest
0 голосов
/ 15 января 2019

Скажем, я хочу static_cast объект типа S, набрать T и переместить присвоить результат:

template <typename S, typename T>
void f(T& t, S s);

Я могу придумать четыре способа написать:

template <typename S, typename T>
void f(T& t, S s) {
    t = static_cast<T>(s);
    t = static_cast<T>(std::move(s));
    t = static_cast<std::remove_reference_t<T>&&>(s);
    t = static_cast<std::remove_reference_t<T>&&>(std::move(s));
}

Некоторые или все эти четыре строки делают одно и то же? Какой предпочтительный способ сделать это?

1 Ответ

0 голосов
/ 15 января 2019

Некоторые или все эти четыре строки делают одно и то же?

Все они двигаться-назначить t. Преобразования в третьем и четвертом излишни. Первый копирует аргумент во временный, а второй перемещается. Второй выше. Хотя другое дело, нужна ли эта функция в первую очередь.

...