Переданная объектная сила быть неожиданно измененным
Этот дефект происходит когда:
Вы используете std:move передать передающую ссылку на функцию, включая объекты типа auto &&.
Вы используете std:forward передать rvalue ссылку на функцию.
Можно передать объект эффективно функции путем кастинга объекта к 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);
}Используя std:move с передачей ссылок может привести к неожиданной модификации lvalue. Используя std:forward с rvalue ссылками возможно, но это подвержено ошибкам и может увеличить сложность вашего кода.
Если вы передаете rvalue ссылку на функцию, используйте std:move бросать объект к rvalue.
Если вы передаете передающую ссылку (или универсальную ссылку) к функции, используйте std:forward бросать объект к rvalue, если и только если объект связан с rvalue. Передающая ссылочная сила быть связанным с rvalue или lvalue. Объекты с типом auto && рассматриваются как передачу ссылок.
| Группа: Программирование |
| Язык: C++ |
| Значение по умолчанию: На для рукописного кода, прочь для сгенерированного кода |
Синтаксис командной строки:
INCORRECT_VALUE_FORWARDING |
| Удар: высоко |