"в" параметрах для "дешевого, чтобы скопировать" типы буду передан значением
"в" параметрах для "дешевого, чтобы скопировать" типы буду передан значением.
Вы используете "в" параметре, когда вы намереваетесь только считать тот параметр в функции. Если параметр является дешевым, чтобы скопировать, передайте параметр значением к:
Проясните, что вы не планируете изменение параметра.
Избегайте дополнительной косвенности, которая требуется, чтобы получать доступ к параметру от функции, когда вы передаете параметр ссылкой.
Параметр является дешевым, чтобы скопировать, когда оба этих условия верны:
Параметр имеет размер, меньше чем или равный двум словам. Например, для параметра foo
, sizeof(foo) <= 2 * sizeof(int)
.
Параметр является тривиально copyable типом. См. is_trivially_copyable.
Polyspace® флаги:
const
параметры, которые передаются ссылкой, если параметры являются дешевыми, чтобы скопировать (sizeof <= 2 * sizeof(int)
и тривиально copyable).
const
параметры, которые передаются значением, если параметры не являются дешевыми, чтобы скопировать. Например, в этом фрагменте кода, оба параметра str
(дорогой, чтобы скопировать) и b
(нетривиально copyable), несовместимы.
void func1(const std::string str); struct B { B(B const&) {} }; void func2(const B b);
Polyspace не отмечает:
Non-const
параметры, которые передаются ссылкой, если те параметры не являются дешевыми, чтобы скопировать и не изменяются в функции. Polyspace рассматривает эти параметры как "в" параметрах.
"в" параметрах, которые передаются ссылкой, если те параметры являются типами только для перемещения. Например, int f(const std::unique_ptr<int>& p);
.
const
параметры, которые передаются ссылкой в конструкторах копии. Например, никакой дефект не повышен на point
в этом фрагменте кода.
class coord { public: coord(int x, int y) {p_x = x; p_y = y;} coord(const coord& point) { p_x = obj.p_x; p_y = obj.p_y;} //... private: int p_x, p_y; }; coord point{1, 1}; void func(const coord& point);
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: операторы объявления |
Категория: необходимый, автоматизированный |