Распространенные способы передать параметры должны использоваться.
Распространенные способы передать параметры должны использоваться.
Если вы следуете известным соглашениям для передающих параметров, разработчик или рецензент могут определить из вашей функциональной подписи, является ли параметр входным параметром, выходным параметром или другим типом параметра.
Эти соглашения обычно используются, чтобы передать параметры функциональному f(X)
:
\in: Если входной тип данных параметров X
является дешевым, чтобы скопировать или не может быть скопирован (например, std::unique_ptr
введите), передайте параметр значением как f(X)
. В противном случае передайте параметр const
ссылка как f(const X &)
.
: Если тип данных выходного параметра X
является дорогим, чтобы переместить, передать параметр ссылкой как f(X &)
. В противном случае не передавайте параметр, но вместо этого возвращайте значение как X f()
.
В/: Передайте параметр lvalue ссылкой как f(X &)
.
Используйте: Передайте параметр rvalue ссылкой как f(X &&)
.
Вперед: Передайте параметр шаблоном rvalue ссылка как template<typename T> f(T &&)
.
Средство проверки отмечает эти неправильные способы передать параметры:
В параметрах:
Вы передаете значением входной параметр, который является дорогим, чтобы скопировать:
f(X); //X is expensive to copy
Вы передаете ссылкой входной параметр, который является дешевым, чтобы скопировать:
f(X &); //X is cheap to copy f(const X &); //X is cheap to copy
Средство проверки рассматривает тип данных, который имеет размер меньше, чем дважды sizeof(void *)
как дешевый, чтобы скопировать.
Параметры:
Вы возвращаете значением выходной параметр, который является дорогим, чтобы переместиться:
X f(); //X is expensive to move
Вы передаете ссылкой выходной параметр, который является дешевым, чтобы переместиться:
f (X &); //X is cheap to move
Средство проверки рассматривает основополагающий тип данных, который имеет размер меньше чем восемь раз sizeof(void *)
как дешевый, чтобы переместиться.
Средство проверки не включает передачу указателями под защитой передачи ссылкой.
Решение нарушения этого правила может иногда включать агрессивные изменения. Например, если средство проверки предполагает, что выходной параметр может быть возвращен значением, но функция уже возвращает значение, необходимо значительно переписать код. Необходимо объединить выходной параметр и уже возвращенное значение в структуру или n-кортеж и затем возвратить эту структуру или n-кортеж. Если выходной параметр и уже возвращенное значение семантически не связано, комбинирование их в структуру не может быть соответствующим. В этом случае добавьте комментарий в результат или код, чтобы избежать другого анализа. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Выравнивания.
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: операторы объявления |
Категория: консультация, неавтоматизированная |