c++ - reales - libro de android studio en español pdf
¿Por qué un espacio de nombre sin nombre es una alternativa "superior" a la estática? (4)
Esta pregunta ya tiene una respuesta aquí:
La sección $ 7.3.1.1 / 2 del Estándar C ++ dice:
El uso de la palabra clave estática está en desuso al declarar objetos en un ámbito de espacio de nombres; el espacio de nombre sin nombre proporciona una alternativa superior.
No entiendo por qué un espacio de nombre sin nombre se considera una alternativa superior. ¿Cuál es el razonamiento? He sabido durante mucho tiempo lo que dice el estándar, pero nunca lo he pensado seriamente, incluso cuando respondía a esta pregunta: ¿ Superioridad del espacio de nombres sin nombre sobre la estática?
¿Se considera superior porque también se puede aplicar a los tipos definidos por el usuario, como describí en mi answer ? ¿O hay alguna otra razón que desconozco? Pregunto esto, particularmente porque ese es mi razonamiento en mi respuesta, mientras que el estándar podría tener otra cosa en mente.
Hay dos razones por las que pienso:
-
static
tiene dos significados diferentes: en el ámbito de clase, significa compartido por toda la clase, mientras que en el ámbito de archivo / función afecta a la visibilidad / almacenamiento ... - espacios de nombres sin nombre permiten declarar nueva
struct
,class
ytypedef
Una nota, sin embargo, el comité retrocedió sobre esto: static
ya no está marcado como obsoleto en n3225
.
Independientemente de las razones que tuvieran, cambiaron de opinión: http://crazycpp.wordpress.com/2011/01/18/static-keyword-is-back/
Una razón puede ser que la static
ya tiene demasiados significados (puedo contar al menos tres). Dado que un espacio de nombre anónimo puede encapsular todo lo que incluye tipos, parece superior a la solución static
.
- Como ha mencionado, el espacio de nombres funciona para cualquier cosa, no solo para funciones y objetos.
- Como Greg ha señalado, la
static
significa demasiadas cosas. - Los espacios de nombre proporcionan una forma uniforme y consistente de controlar la visibilidad en el ámbito global. No tiene que usar diferentes herramientas para lo mismo.
- Al usar un espacio de nombres anónimo, el nombre de la función / objeto se truncará correctamente, lo que le permite ver algo como "(espacio de nombres anónimo) :: xyz" en la tabla de símbolos después de eliminar el mapa, y no solo "xyz" con enlaces estáticos .
- Como se señala en los comentarios a continuación, no está permitido usar elementos estáticos como argumentos de plantilla, mientras que con espacios de nombres anónimos está bien.
- ¿Más? Probablemente, pero no puedo pensar en nada más ahora.