"в" параметрах для "дешевого, чтобы скопировать" типы буду передан значением
"в" параметрах для "дешевого, чтобы скопировать" типы буду передан значением.
Вы используете "в" параметре, когда вы намереваетесь только считать тот параметр в функции. Если параметр является дешевым, чтобы скопировать, передайте параметр значением к:
Проясните, что вы не планируете изменение параметра.
Избегайте дополнительной косвенности, которая требуется, чтобы получать доступ к параметру от функции, когда вы передаете параметр ссылкой.
Параметр является дешевым, чтобы скопировать, когда оба этих условия верны:
Параметр имеет размер, меньше чем или равный двум словам. Например, для параметра 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);
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
| Группа: операторы объявления |
| Категория: необходимый, автоматизированный |