88 votes

Pourquoi l'espace de nom sans nom est une alternative " supérieure " à la statique ?

La section $7.3.1.1/2 de la norme C++ se lit comme suit,

L'utilisation du mot clé static est déprécié lors de la déclaration d'objets dans un espace de noms ; l'espace de noms non nommé fournit une alternative supérieure.

Je ne comprends pas pourquoi l'espace de noms sans nom est une alternative supérieure ? Quel est le raisonnement ? Je savais depuis longtemps ce que dit la norme, mais je n'ai jamais réfléchi sérieusement à la question, même lorsque j'ai répondu à cette question : Supériorité des espaces de noms non nommés sur les espaces statiques ?

Est-il considéré comme supérieur parce qu'il peut également être appliqué à des types définis par l'utilisateur, comme je l'ai décrit dans mon document intitulé réponse ? Ou bien y a-t-il une autre histoire dont je ne suis pas au courant ? Je pose cette question, notamment parce que c'est ce que je pense dans ma réponse, alors que le Standard a peut-être autre chose en tête.

96voto

Sergey Tachenov Points 8123
  • Comme vous l'avez mentionné, l'espace de noms fonctionne pour tout, pas seulement pour les fonctions et les objets.
  • Comme Greg l'a souligné, static signifie déjà trop de choses.
  • Les espaces de noms offrent un moyen uniforme et cohérent de contrôler la visibilité à l'échelle mondiale. Vous ne devez pas utiliser différents outils pour la même chose.
  • Lors de l'utilisation d'un espace de noms anonyme, le nom de la fonction/objet sera démêlé correctement, ce qui vous permet de voir quelque chose comme " (espace de noms anonyme)::xyz" dans la table des symboles après démêlage, et pas seulement "xyz" avec un lien statique.
  • Comme indiqué dans les commentaires ci-dessous, il n'est pas permis d'utiliser des éléments statiques comme arguments de modèle, alors que cela est possible avec les espaces de noms anonymes.
  • Plus ? Probablement, mais je ne peux pas penser à autre chose pour le moment.

9voto

Greg Hewgill Points 356191

L'une des raisons peut être que static a déjà trop de significations (je peux en compter au moins trois). Puisqu'un espace de noms anonyme peut encapsuler n'importe quoi, y compris des types, il semble supérieur à l'approche static solution.

7voto

Matthieu M. Points 101624

Je pense qu'il y a deux raisons :

  • static a deux significations différentes : à la portée de la classe, il signifie partagé par toute la classe tandis qu'à la portée du fichier/de la fonction, il affecte la visibilité/le stockage...
  • les espaces de noms non nommés permettent de déclarer de nouvelles struct , class y typedef

Une remarque cependant, le comité a fait marche arrière sur ce point : static n'est plus marqué comme obsolète dans n3225 .

4voto

Crazy Eddie Points 23778

Quelles que soient les raisons qu'ils avaient, ils ont changé d'avis : http://crazycpp.wordpress.com/2011/01/18/static-keyword-is-back/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X