¿Por qué los símbolos (funciones y variables) que se definen en un espacio de nombre anónimo tienen enlaces internos como con la palabra clave estática? Si una función no está visible/accesible fuera, ¿cuál es el motivo para tener un enlace externo?¿Por qué las funciones/objetos dentro del espacio de nombres anónimo tienen enlaces externos?
Respuesta
En C++ 03, los nombres con enlaces internos no pueden utilizarse como argumentos de plantilla [*]. Por lo tanto, los nombres de la mayoría de las cosas en los espacios de nombres sin nombre tenían vínculos externos para permitir su uso con plantillas. Podría proporcionar explícitamente un nombre de vinculación interna en un espacio de nombre sin nombre declarando static
, igual que en un espacio de nombre nombrado o global.
Ambas cosas cambiaron en C++ 11 - los nombres en espacios de nombres sin nombre tienen un enlace interno por defecto (3.5/4), y los nombres con enlace interno se pueden usar como argumentos de plantilla.
[*] para los tipos, debe tener un enlace externo. Para objetos y funciones, debe tener un enlace externo si su dirección se usa como argumento de plantilla, aunque está bien, por ejemplo, usar como argumento de plantilla el valor de un entero const con enlace interno.
+1, ¿Puede agregar a la respuesta el número de párrafo en el estándar C++ 11 que indica que el enlace interno es por defecto? – Klaim
- 1. Vinculación de símbolos dentro del espacio de nombres anónimo dentro de un espacio de nombre normal
- 2. ¿Por qué las funciones en línea tienen enlaces externos por defecto?
- 3. Espacio de nombres anónimo anidado?
- 4. Anónimo Espacio de nombres ambigüedad
- 5. Métodos dentro del espacio de nombres C#
- 6. ¿Qué valores tienen nombres?
- 7. ¿Cómo establecer un punto de interrupción por nombre de función dentro del espacio de nombres anónimo en Visual Studio?
- 8. blindaje #include dentro del espacio de nombres {} bloque?
- 9. espacio de nombre anónimo
- 10. operador nuevo espacio de nombres dentro
- 11. Putting using statement dentro del espacio de nombres falla
- 12. constructores dentro de un espacio de nombres
- 13. ¿Por qué Eclipse PHP no reconoce las declaraciones del espacio de nombres?
- 14. ¿Debería 'usar' estar dentro del espacio de nombres o afuera?
- 15. Clases dentro de CoffeeScript 'Espacio de nombres'
- 16. ¿Por qué las plantillas no pueden estar dentro de bloques externos "C"?
- 17. ¿Por qué algunas funciones dentro de un espacio de nombres son accesibles sin el prefijo de delimitación del espacio de nombres?
- 18. Mensaje OnUnload necesario para enlaces externos
- 19. ¿Por qué no podemos declarar alias de espacio de nombres dentro de una clase?
- 20. ¿Sa1200 Todas las directivas de uso deben colocarse dentro del espacio de nombres (StyleCop) puramente cosmético?
- 21. Por qué tienen clase estática pública dentro de una clase
- 22. amigo clase función dentro de un espacio de nombres
- 23. ¿Por qué el alcance del parámetro C++ afecta la búsqueda de funciones dentro de un espacio de nombres?
- 24. ¿Es aceptable hacer enlaces externos target = "_ blank"?
- 25. Orden de búsqueda del espacio de nombres
- 26. ¿Por qué CSS no funciona en las filas de la tabla cuando las celdas dentro de las filas tienen nombres de clase?
- 27. ¿Por qué no hay espacio de nombres Microsoft.Win64?
- 28. ¿Por qué mi log en el espacio de nombres estándar?
- 29. qué espacio de nombres con anteponer ::, por ejemplo :: std :: vector
- 30. ¿Qué es un espacio de nombres?
** No ** tienen linkeage externo, pero interno. ¿Cuál es tu fuente? –
El estándar C++ 03, probablemente. –
@SteveJessop existen espacios de nombres anónimos en C++ 03 también, y dan linkeage interno. –