Как определить, правильно ли я использую по ссылке? - PullRequest
1 голос
/ 01 апреля 2020

Итак, у меня есть функция, которая устанавливает переменную в векторе и возвращает обратно изменяемую ссылку на ячейку. Но я не уверен, правильно ли я использую ссылку «&», так как у меня есть два примера, которые работают. Пример 1:

Cell& Grid::set(const int x, const int y, const Cell & value) {
    int index = get_index(x, y);
    this->grid[index] = value;
    return this->grid[index];
}

Пример 2:

Cell& Grid::set(const int x, const int y, const Cell value) {
    int index = get_index(x, y);
    this->grid[index] = value;
    return this->grid[index];
}

Какой будет правильный путь и как я могу определить будущее?

Редактировать: ячейка не является перечислением объект

1 Ответ

1 голос
/ 01 апреля 2020

Это функция приемника для параметра value, из-за этого:

grid[index] = value;

Так что в этом случае вы должны передать неконстантное значение и переместить его в grid:

Cell& Grid::set(const int x, const int y, Cell value)
{
    grid[get_index(x, y)] = std::move(value);
    return grid[index];
}

Вы должны убедиться, что Cell является подвижным типом, потому что, если это не так, это будет стоить вам дополнительную копию.

Это общий шаблон, который используется, когда дело доходит до функций приемника. (Имеющиеся в виду функции, которые хранят аргументы где-то, что переживает сам вызов функции.)

Также взгляните на другой соответствующий ответ на другой вопрос о том, когда полезно передавать по ссылке.

...