La section $ 7.3.1.1/2 de la norme C++ se lit comme suit:
L'utilisation du mot clé statique est déconseillée lors de la déclaration d'objets dans une étendue d'espace de noms; l'espace de noms sans nom fournit une alternative supérieure.
Je ne comprends pas pourquoi un espace de noms sans nom est considéré comme une alternative supérieure? Quelle est la justification? Je sais depuis longtemps ce que dit la norme, mais je n'y ai jamais sérieusement réfléchi, même lorsque je répondais à cette question: Supériorité de l'espace de noms sans nom sur statique?
Est-il considéré comme supérieur car il peut également être appliqué à des types définis par l'utilisateur, comme je l'ai décrit dans mon réponse ? Ou y a-t-il une autre raison, que je ne connais pas? Je pose cette question, en particulier parce que c'est mon raisonnement dans ma réponse, alors que la norme pourrait avoir autre chose en tête.
static
signifie déjà trop de choses.Une raison 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 à la solution static
.
Je pense qu'il y a deux raisons:
static
a deux significations différentes: à portée de classe, cela signifie partagé par toute la classe tandis qu'à portée de fichier/fonction, cela affecte la visibilité/stockage ...struct
, class
et typedef
Une remarque cependant, le comité a reculé sur ce point: static
n'est plus marqué comme obsolète dans n3225
.
Quelles que soient les raisons qu'ils avaient, ils ont changé d'avis: http://crazycpp.wordpress.com/2011/01/18/static-keyword-is-back/