globales estáticas y espacios de nombres anónimos en C ++

8
  1. ¿Por qué C ++ hizo una distinción entre globales estáticos (vinculación interna) y símbolos en un espacio de nombres sin nombre (vinculación externa, pero no hay manera de referirse a ella desde el exterior), cuando se introduce esta última?

  2. ¿Alguna de estas razones sigue siendo válida, o hay nuevas?

  3. ¿Quedan lugares donde aún son diferentes, pero la regla arbitraria de que uniones globales anónimas (o espacio de nombres) debe ser static , ¿y qué son?

  4. Para obtener puntos de bonificación, si no hay motivos válidos para que sean diferentes, ¿existe una solicitud para que sean equivalentes?

Cuando C ++ introdujo espacios de nombres (C ++ 98), y específicamente espacios de nombres sin nombre, los globales estáticos quedaron obsoletos como obsoletos e inferiores a lo nuevo en un episodio de entusiasmo, aunque eso era revertido con C ++ 11 :
Depredación de la palabra clave estática ... ¿no más?

Antes de C ++ 11, los símbolos con enlace interno no podían usarse como argumentos de plantilla: ¿Por qué C ++ 03 requiere parámetros de plantilla para ¿Tiene un enlace externo?

    
pregunta Deduplicator 12.09.2015 - 02:59

1 respuesta

3

Supongo que esto no responde todas sus preguntas (¿o alguna de ellas?), pero la diferencia clave entre las declaraciones estáticas a nivel de archivo y los espacios de nombres anónimos es que los espacios de nombres también se aplican a los tipos (no puede declarar un static escriba en el mismo sentido en que declara una variable), por eso se prefiere el espacio de nombres, por lo que hay un solo idioma para declarar los datos y tipos de archivos.

Ejemplificando, el siguiente código debe compilarse bien. (No es realmente útil, ya que no puede distinguir entre ambos tipos, pero está permitido)

#include <iostream>

struct Foobar
{
    int   foo;
    float bar;
};

namespace
{

struct Foobar
{
    double baz;
};

} // namespace

int main()
{
    std::cout << "HELLO!\n";
}

Una prueba en vivo aquí .

    
respondido por el glampert 14.09.2015 - 04:04

Lea otras preguntas en las etiquetas