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