2009-08-25 7 views
0

Juste un coup rapide pour avoir une idée de la communauté dans la préférence générale: Lorsque vous travaillez avec des objets comme vecteurs (mathématique, non STL) et Matrices préférez-vous une bibliothèque:Préférence matricielle/vectorielle: renvoie la copie ou la transformation interne?

A) ne modifie pas les objets mais renvoie des copies à la place:

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

B) modifie les objets et renvoie les références:

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

Je peux voir des avantages et des inconvénients à la fois, mais la grande chose pour moi est que la méthode B serait plus efficace.

Alors, les opinions?

Répondre

1

Le dépend de la langue et comment elle s'intégrera avec les cadres dominants.

Cependant, en général, je préfère la version A, SI vous travaillez seulement avec de petits vecteurs et matrices. Par exemple, s'il s'agit d'une bibliothèque graphique, et que vous travaillez avec 2-4 vecteurs et matrices 3x3 et 4x4, je préfère les rendre immuables, et pas nécessairement traiter des références. (Cela signifie que vous utilisez un langage où le coût de construction ne va pas tuer votre performance.)

Si vous avez affaire à de grandes matrices, j'ai tendance à préférer les références, puisque les frais généraux de copie et de construction est trop génial.

0

Pour les objets de valeur, il est souvent préférable de renvoyer une nouvelle valeur.

et il peut ou peut y avoir pas beaucoup de différence de performance