Oui. C'est une optimisation de base que tout compilateur moderne (et même ancien) fera.
En fait, je ne pense pas qu'il soit vraiment précis d'appeler que vous avez écrit une optimisation, puisque la façon simple de traduire cela en assembly implique un stockage à l'adresse _vertex, plus index, plus {0, 1,2} (multiplié par les tailles appropriées pour les choses, bien sûr).
En général cependant, les compilateurs modernes sont incroyable. Presque toute l'optimisation que vous pouvez imaginer sera mise en œuvre. Vous devriez toujours écrire votre code d'une manière qui met l'accent sur la lisibilité, à moins que vous sachiez que d'une manière a des avantages significatifs de performance pour votre code.
Comme un exemple simple, le code comme ceci:
int func() {
int x;
int y;
int z;
int a;
x = 5*5;
y = x;
z = y;
a = 100 * 100 * 100* 100;
return z;
}
sera optimisé à ceci:
int func() {
return 25
}
De plus, le compilateur inline également la fonction de sorte qu'aucun appel est en fait. Au lieu de cela, partout 'func()' apparaîtra sera simplement remplacé par '25'.
Ceci est juste un exemple simple. Il y a beaucoup plus d'optimisations complexes qu'un compilateur moderne implémente.
Pourquoi pensez-vous que la deuxième version est «plus optimisée» que la première? Vous pourriez découvrir que le premier bloc de code peut effectivement être plus rapide que le second dans des circonstances différentes (surchargé '[]', la référence étant implémentée comme un pointeur dans un registre ... –
Il semblerait en effet plus logique de demander si le second extrait peut être optimisé au premier (élimination de sous-expression commune, je pense). – visitor