2 La transformation du programme

Ce que l'on veut pourvoir faire, c'est écrire un calcul sur des vecteurs comme ceci :

1
2
Vecteur v1, v2, v3;
v3 = v1 + 2.0*v2;

Mais si vous faîtes une surcharge des opérateurs (+, *, / ...) entre chaque opérateurs le compilateur (et le CPU après) va créer autant de Vecteur temporaires qu'il y a d'opérateurs. Donc plus les vecteurs sont grand et plus vous allez perdre du temps à créer des variables temporaires. Pour des Vecteur à 3 dimensions vous pouvez vous dire que les variables temporaires ne perdrons pas trop de temps (et pourtant c'est le cas), mais si les Vecteur sont grands (taille 50, 100, 1000 ou plus) la perte de temps due au variables temporaires sera très importante.

En fait, on voudrait que le compilateur transforme l'expression suivante :

1
v3 = v1 + 2.0*v2;

Et écrive du C :

1
2
3
4
int i;
for(i = 0; i < sizeVect; ++i){}
	v3[i] = v1[i] + 2.0*v2[i];
}

sizeVect est la taille des Vecteur.

Ce qui permet d'avoir les performances du C en gardant l'expressivité du C++

Et c'est pour cela que les templates vont nous aider.