Матрица / Вектор Предпочтение: Вернуть копию или преобразовать внутри? - PullRequest
0 голосов
/ 25 августа 2009

Просто быстрый способ понять предпочтения сообщества в целом: при работе с объектами, такими как Векторы (математические, а не STL) и Матрицы, вы предпочитаете библиотеку, которая:

A) Не изменяет объекты, но вместо этого возвращает копии:

Vec2 Vec2::Add(float x, float y) {
    return Vec2(this.x + x, this.y + y);
}

B) Изменяет объекты и возвращает ссылки:

Vec2& Vec2::Add(float x, float y) {
    this.x += x;
    this.y += y;
    return (*this);
}

Я вижу некоторые плюсы и минусы в обоих случаях, но для меня важно то, что метод B будет более эффективным.

Итак, мнения?

Ответы [ 2 ]

1 голос
/ 25 августа 2009

Зависит от языка и от того, как он будет интегрирован с доминирующими структурами.

Однако, в общем, я предпочитаю версию A, если вы работаете только с небольшими векторами и матрицами. Например, если это графическая библиотека, и вы работаете с матрицами 2-4 и 3x3 и 4x4, я предпочитаю делать их неизменяемыми и не обязательно иметь дело со ссылками. (Это означает, что вы используете язык, на котором стоимость строительства не снизит вашу производительность.)

Если вы имеете дело с большими матрицами, я предпочитаю ссылки, так как накладные расходы на копирование и конструирование слишком велики.

0 голосов
/ 25 августа 2009

для объектов-значений, часто лучше возвращать новое значение.

и может быть или не быть большая разница в производительности

...