static
es un especificador de almacenamiento. La palabra "estático" significa inmutable. "Almacenamiento" se refiere a dónde está el objeto en la memoria, es decir, su dirección.
Un objeto con almacenamiento static
reside en una dirección constante.
Sucede que un objeto con almacenamiento extern
también tiene una dirección constante. Debido a la forma en que los programas C y C++ están vinculados, es una necesidad. Y dado que extern
es el comportamiento menos sorprendente, también es el predeterminado.
Si lo piensas en términos de extern
siendo una característica adicional en la parte superior de static
, creo que tiene un poco más de sentido. Es un poco estúpido declarar una función static
, ya que no hay alternativa en ningún lenguaje completamente compilado, pero la dirección de una función es estática, incluso si no está visible externamente.
La parte realmente inconsistente, entonces, es que los miembros de clase que se comparten entre diferentes unidades de compilación deben ser declarados static
, no extern
...
Y la estática tiene, como mucho la palabra clave C++, un significado dependiente del contexto. – Klaim