2012-05-31 19 views
16

¿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?

+0

** No ** tienen linkeage externo, pero interno. ¿Cuál es tu fuente? –

+3

El estándar C++ 03, probablemente. –

+0

@SteveJessop existen espacios de nombres anónimos en C++ 03 también, y dan linkeage interno. –

Respuesta

37

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.

+3

+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

Cuestiones relacionadas