Переданная объектная сила быть неожиданно измененным
Этот дефект происходит когда:
Вы используете 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 |
Удар: высоко |