Передача значений к другим функциям должна быть сделана через: (1) станд.:: переместитесь, если значение является rvalue ссылкой, (2) станд::, если значение передает ссылку.
Передача значений к другим функциям должна быть сделана через: (1) станд.:: переместитесь, если значение является rvalue ссылкой, (2) станд::, если значение передает ссылку.
Можно передать объект эффективно функции путем кастинга объекта к 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);
}Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
| Группа: вспомогательная библиотека Языка |
| Категория: необходимый, автоматизированный |