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