"передайте" параметры, объявленные, как T && должен всегда передаваться
"передайте" параметры, объявленные, как T && должен всегда передаваться.
Поскольку rvalue ссылки не могут связать с lvalues, функции, которые включают использование семантики перемещения при помощи rvalue ссылок в их подписи, не принимают lvalues. Этот вопрос решен при помощи rvalue ссылки на текстовый объект шаблона nonconst, который называется "прямым" параметром. Эти параметры могут связать и с rvalues и с lvalues при сохранении их проверок cv и категорий значения. "Прямые" параметры полезны, когда это необходимо, чтобы передать значение целевому объекту или функции при помощи функционального std::forward
.
Когда вы объявите шаблон функции при помощи "Прямого" параметра, не используйте параметр ни в каких операциях. Поскольку "Прямые" параметры могут связать и с lvalues и с rvalues, использование их в операции может повредить их проверки cv и категории значения. Передайте эти параметры непосредственно месту назначения при помощи std::forward
не используя их в операции.
Polyspace® отмечает "Прямой" параметр в определении шаблона функции или Лямбда-выражения, если какое-либо из этих условий верно:
"Прямой" параметр не передается месту назначения при помощи std::forward
.
Операция кроме передачи выполняется на "Прямом" параметре или на объекте члена его.
Polyspace игнорирует шаблоны и Лямбда-выражения, которые остаются неиспользованными в вашем коде.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: операторы объявления |
Категория: необходимый, автоматизированный |