Résumé des règles de portée en C++

De RAD Studio
Aller à : navigation, rechercher

Remonter à Portée en C++ - Index

Les règles suivantes s'appliquent à tous les noms, y compris les noms typedef et les noms de classes, à condition que C++ accepte ces noms dans le contexte en question :

  • Le nom lui-même est testé afin de lever toute ambiguïté éventuelle. Si aucune ambiguïté n'est détectée, la séquence d'accès est initiée.
  • S'il n'y a pas d'erreurs de contrôle d'accès, le type de l'objet, de la fonction, de la classe, de typedef, etc. est testé.
  • Si le nom est utilisé hors d'une fonction ou d'une classe, ou préfixé par l'opérateur unaire de résolution de portée ::, et si le nom n'est pas qualifié par l'opérateur binaire :: ou par les opérateurs de sélection de membres . et ->, il doit être un objet global, une fonction ou un énumérateur.
  • Si le nom apparaît sous une des formes X::n, x.n (où x est un objet de X ou une référence à X), ou ptr->n (où ptr est un pointeur sur X), n est le nom d'un membre de X ou le membre d'une classe dont est dérivé X.
  • Tout nom, non encore décrit, utilisé dans une fonction membre statique doit être déclaré dans le bloc où il apparaît ou dans un bloc englobant, ou être un nom global. La déclaration d'un nom local n cache des déclarations de n dans des blocs englobant et des déclarations globales de n. Les noms figurant dans des portées différentes ne sont pas surchargés.
  • Tout nom, non encore décrit, utilisé dans une fonction membre non statique de classe X doit être déclaré dans le bloc où il apparaît ou dans un bloc englobant, être membre de la classe X ou d'une classe de base de X, ou être un nom global. La déclaration d'un nom local n cache des déclarations de n dans des blocs englobant, des membres de la classe de la fonction, et des déclarations globales de n. La déclaration d'un nom de membre cache des déclarations de même nom dans des classes de base.
  • Le nom d'un argument dans une définition de fonction est dans la portée du bloc de définition principale de la fonction. Le nom d'un argument de fonction dans une déclaration de fonction de référence n'a pas de portée. La portée d'un argument implicite est déterminée par le point de déclaration de cet argument, mais il n'a pas accès aux variables locales ou aux membres de classe non statiques. Les arguments implicites sont évalués à chaque point d'appel.
  • Une valeur d'initialisation de constructeur est évaluée dans la portée du bloc de définition principale de son constructeur, de sorte qu'elle peut se référer aux noms d'arguments du constructeur.

Voir aussi