Переадресация значений на другие функции осуществляется через: (1) std:: move, если значение является ссылкой rvalue, (2) std:: forward, если значение является ссылкой на переадресацию
Переадресация значений на другие функции осуществляется через: (1) std:: move, если значение является ссылкой rvalue, (2) std:: forward, если значение является ссылкой на переадресацию.
Можно эффективно передать объект в функцию, приведя объект в rvalue и воспользовавшись семантикой перемещения.
Если вы пересылаете ссылку rvalue на функцию, используйте std::move
чтобы привести объект к значению rvalue.
Если вы пересылаете ссылку на переадресацию (или универсальную ссылку) в функцию, используйте std::forward
чтобы привести объект к значению rvalue тогда и только тогда, когда объект связан с значением rvalue. Ссылка на пересылку может быть связана с rvalue или lvalue. В целях этого правила объекты с типом auto &&
рассматриваются как ссылки на пересылку.
Использование std::move
с переадресацией ссылок может привести к неожиданному изменению значения lvalue. Использование std::forward
с rvalue ссылки возможны, но это подвержено ошибкам и может увеличить сложность вашего кода.
Polyspace® флаги использования std::move
переадресация ссылки на функцию, включая объекты типа auto &&
.
Polyspace помечает использование std::forward
чтобы переслать ссылку rvalue на функцию.
Polyspace не помечает использование std::move
или std::forward
если переадресация на функцию не выполняется. Например, в этом фрагменте кода не возникает дефекта при использовании std::move
с ссылкой на пересылку b2
и использование std::forward
с ссылкой перезначения b1
.
template <typename T1, typename T2> void func(T1& b1, T2&& b2) { const T1& b10 = std::forward<B>(b1); const T2& b20 = std::forward<B>(b2); const T1& b11 = std::move(b1); const T2& b21 = std::move(b2); }
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Библиотека языковой поддержки |
Категория: Необходимый, Автоматизированный |