2013-02-07 5 views
0

Avec structure:initialisation de la structure (Zéro valeurs) avec une seule commande

struct element_data 
{ 
    int size; 
    int type; 
    int nID; 
    int attribute; 
    double fValue; 
    int mode; 
    bool bTemp; 
}; 

... -je initialiser manuellement tous les membres à zéro:

inline element_data() : //Empty constructor 
    size(0), 
    type(0), 
    nID(0), 
    attribute(0), 
    fValue(0), 
    mode(0), 
    bTemp(false) 
{} 

trop de commandes, qui peut ralentir ma calculatrice. Y a-t-il un autre moyen de le faire? Par exemple, avec une seule commande, toutes les valeurs prendront les valeurs

+0

Utilisez memcpy()? ... – MatthewD

+0

Êtes-vous ** absolument certain ** que c'est votre goulot d'étranglement? Essayer d'éviter les fonctionnalités de langage qui résolvent votre problème dans l'intérêt de la performance est presque toujours une très mauvaise idée, sauf si vous avez des preuves documentées que c'est vraiment le problème. – templatetypedef

+0

vous pourriez feindre. mais le nombre de commandes de code source n'affectera pas la vitesse de ceci. C'est aussi rapide que ça. –

Répondre

1

Comme votre element_data struct est POD, vous pouvez initialiser les membres à la valeur par défaut de deux façons:

element_data ed = element_data(); 

OU

element_data ed = {}; 

Tous les membres entiers seront initialisées à 0 et bool sera initialisé à false.

+0

Le deuxième exemple génère une erreur de compilation et la première définition ne fonctionne correctement que si je l'initialise manuellement. – xersi

+0

Quel compilateur avez-vous? BTW, vous n'avez pas besoin d'un constructeur par défaut pour le premier. voir ceci: http://ideone.com/OHMXfp – billz

+0

et ceci: http://ideone.com/5GgkcF – billz

2

Non. Au moins, si l'efficacité est votre préoccupation.

Here's why

Je cite, à partir du lien ci-dessus, « Toutes choses étant égales par ailleurs, votre code fonctionnera plus rapidement si vous utilisez des listes d'initialisation plutôt que l'affectation. » Rappelez-vous, juste parce que c'est beaucoup de code, ne signifie pas que c'est moins efficace. En fait, le code optimisé tend généralement à paraître plus grand et plus complexe que le code général non optimisé. C'est généralement parce que vous prenez des raccourcis basés sur les propriétés des données que vous traitez ou sur l'algorithme que vous utilisez.

L'avantage de cette approche est qu'elle ne repose pas sur le code qui crée l'instance pour initialiser correctement les membres à zéro, tout en étant efficace. Une liste d'initialisation s'assure que les membres de votre structure sont toujours initialisés correctement.

Questions connexes