Аргумент к станд.:: вперед не буду впоследствии использоваться.
Аргумент к станд.:: вперед не буду впоследствии использоваться.
Вы обычно используете std::forward
в шаблоне функции, чтобы передать передающий параметр ссылки другой функции. Ресурсы параметра могут быть переданы другому объекту посредством операции пересылки, в зависимости от категории значения параметра.
Для rvalue параметра параметр находится в неопределенном состоянии, если он перемещен от после вызова std::forward
и это не должно быть снова использовано.
Для lvalue параметра, Если вы снова используете параметр после вызова std::forward
, модификации к параметру могут влиять на аргумент функции вызывающей стороны, которой вы передаете параметр.
Polyspace® отмечает вызов std::forward
если переданный объект снова используется после вызова. Polyspace также подсвечивает линии, где переданный объект снова используется в вашем коде.
Polyspace не отмечает вызов std::forward
если его аргумент снова используется в ветви, которая не может быть достигнута после вызова std::forward
. Например, в этом фрагменте кода, ветвь, где повторное использование переменной t
происходит не может быть достигнут после того, как код вводит ветвь где std::forward
используется.
template<typename T> void func(T&& t) { T&& p = t; switch(t) { case 0: p = std::forward<T>(t); break; case 1: t--; //t reused break; } }
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: вспомогательная библиотека Языка |
Категория: необходимый, автоматизированный |