Il est "mauvais" parce que vous n'êtes pas la mise en œuvre de votre intention.
Votre intention est de définir chaque valeur dans le tableau à zéro et ce que vous avez programmé est l'établissement d'une zone de la mémoire brute à zéro. Oui, les deux choses qui ont le même effet mais c'est plus clair pour tout simplement écrire le code à zéro à chaque élément.
Aussi, il est probablement plus efficace.
class ArrInit
{
public:
ArrInit();
private:
int a[1024];
};
ArrInit::ArrInit()
{
for(int i = 0; i < 1024; ++i) {
a[i] = 0;
}
}
int main()
{
ArrInit a;
}
La compilation avec visual c++ 2008 32 bits avec des optimisations tourné sur la compile de la boucle -
; Line 12
xor eax, eax
mov ecx, 1024 ; 00000400H
mov edi, edx
rep stosd
Qui est à peu près exactement ce que les memset serait susceptible de les compiler, de toute façon. Mais si vous utiliser memset il n'y a pas de place pour le compilateur d'effectuer des optimisations, alors que par écrit de votre intention, il est possible que le compilateur pourrait effectuer d'autres optimisations, par exemple en remarquant que chaque élément est plus tard, à quelque chose d'autre avant elle est utilisée pour l'initialisation peut être optimisé, ce qui probablement ne pouvait pas faire presque aussi facilement que si vous aviez utilisé memset.