Définitions et déclarations externes
Remonter à Syntaxe de déclaration - Index
Les spécificateurs de classe de stockage auto et register ne peuvent pas apparaître dans une déclaration externe. Pour chaque identificateur d'une unité de traduction déclaré avec attribut de liaison interne, une seule définition externe est possible.
Une définition externe est une déclaration externe qui définit aussi un objet ou une fonction ; c'est-à-dire qui alloue aussi de la mémoire. Si un identificateur déclaré avec un attribut de liaison externe est utilisé dans une expression (autre que dans l'opérande de sizeof), il doit exister très exactement pour lui une seule définition externe dans l'ensemble du programme.
Le compilateur C++ autorise des déclarations ultérieures de noms externes, comme des tableaux, des structures et des unions, afin de compléter les informations contenues dans les déclarations existantes. Par exemple :
int a[]; // no size struct mystruct; // tag only, no member declarators . . . int a[3] = {1, 2, 3}; // supply size and initialize struct mystruct { int i, j; }; // add member declarators
Le diagramme de syntaxe suivant couvre la syntaxe de la déclaration d'une classe. Dans la section relative aux classes (commençant par Classes), vous trouverez quelques exemples de déclaration d'une classe. Références lvalue décrit en détail les types référence lvalue C++ (en rapport avec les types pointeur). Enfin, reportez-vous à Utilisation des templates pour une description des classes de type template.
Syntaxe des déclarations de classes C++Builder (C++ seulement)
class-specifier: class-head { <member-list> } class-head: class-key <identifier> <base-specifier> class-key class-name <base-specifier> member-list: member-declaration <member-list> access-specifier : <member-list> member-declaration: <decl-specifiers> <member-declarator-list>; function-definition <;> qualified-name ; member-declarator-list: member-declarator member-declarator-list, member-declarator member-declarator: declarator <pure-specifier> <identifier> : constant-expression pure-specifier: = 0 member-initializer-list: member-initializer member-initializer , member-initializer-list member-initializer: class-name ( <argument-list> ) identifier ( <argument-list> ) operator-function-name: operator operator-name base-specifier: : base-list class-name virtual <access-specifier> class-name access-specifier <virtual> class-name base-list: base-specifier base-list , base-specifier access-specifier: private protected public conversion-function-name: operator conversion-type-name conversion-type-name: type-specifiers <pointer-operator> constructor-initializer: :member-initializer-list operator-name: one of new delete sizeof typeid + - * / % ^ & | ~ ! = <> += -= =* /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ __ , ->* -> () [ ] .*