2010-06-09 9 views
13
struct some_struct{ 
    int a; 
}; 
some_struct n = {}; 

n.a sera 0 après ceci; Je sais que cette forme d'initialisation est héritée de C et est supportée pour la compatibilité avec les programmes C, mais cela ne se compile qu'avec C++, pas avec le compilateur C. J'utilise Visual C++ 2005.Initialisation explicite de membres de structure/classe

En C ce type d'initialisation

struct some_struct n = {0}; 

est correcte et sera zéro-initialiser tous les membres d'une structure.

La paire d'accolades vide est-elle une norme d'initialisation? J'ai d'abord vu cette forme d'initialisation dans un tutoriel WinAPI de msdn.

Répondre

9

La forme d'initialisation des accolades vides est standard en C++ (elle est explicitement autorisée par la grammaire). Voir C Static Array Initialization - how verbose do I need to be? pour plus de détails si vous êtes intéressé.

Je suppose qu'il a été ajouté à C++ car il peut ne pas être approprié d'utiliser une valeur 0 pour une valeur d'initialisation par défaut dans toutes les situations.

8

Il est standard en C++, il est en C.

La syntaxe était introduit en C++, car certains objets ne peuvent pas être initialisés avec 0, et il n'y aurait pas de façon générique d'effectuer une initialisation de valeur de tableaux.

0

Le {0} est apparemment C99.

Une autre façon d'initialiser dans un C89 et C++ manière compatible est ce "truc":

struct {some_struct int a; };

static un_struct zstruct;

un_struct n = zstruct;

Ceci utilise le fait que les variables statiques sont pré-initialisées avec de la mémoire 0 ', contrairement aux déclarations sur la pile ou le tas.

+0

L'initialisation avec '{0}' est également valide pour C89. – jamesdlin

Questions connexes