2010-01-03 18 views

Respuesta

33

La palabra clave static tiene cuatro usos separados, solamente dos de los cuales están estrechamente relacionados:

  • estática en ámbito global y espacio de nombres (aplicado a ambas variables y funciones) medios de enlace interno
    • esto es reemplazado por unnamed namespaces y no está relacionado con el resto
    • en particular, otros tienden a implicar algún tipo de exclusividad, pero el enlace interno significa opuesto a: puede tener muchos objetos con el mismo nombre, siempre y cuando cada uno tiene vinculación interna y que sólo tiene uno por unidad de traducción
  • miembros de datos estáticos son "compartidas" entre todas las instancias de la clase
    • es más como si estuvieran independiente de cualquier instancia de clase
    • esto a veces se agrupan con los métodos estáticos
  • métodos estáticos no "operan" en una instancia actual
    • no este puntero; puede llamar sin una instancia
  • variables locales estáticas (en funciones) persisten en todo el ámbito de cada llamada a la función

Ambos miembros de datos estáticos y variables locales estáticas pueden convertirse en estado global oculta, y se debe utilizar cuidadosamente.

¿Ahora cuáles dos están estrechamente relacionados? No son los dos miembros de la clase — la advertencia sobre el estado global lo delata. Puede considerar los miembros de datos estáticos como variables locales estáticas, donde las funciones a las que pertenecen son todos métodos de la clase, en lugar de una única función.

Encontré muchos related questions, pero, sorprendentemente, no hay duplicados.

3

Se puede hacer referencia a un miembro estático sin una instancia.

Consulte la sección "Miembros estático" aquí: http://www.cplusplus.com/doc/tutorial/classes2/

+1

La pregunta, sin embargo, era acerca de las variables estáticas, no de los miembros. –

+0

No está claro si el OP estaba haciendo esa distinción, a pesar de que 'término variable' era el término utilizado. –

+0

@Michael: lo que podría significar una variable miembro estática (depende de qué se trata la pregunta original y no está 100% clara). –

4

Las variables estáticas se inicializan en el segmento de datos (en x86, modificar según sea apropiado para otras arquitecturas) en lugar de en la pila. Persisten durante la vida del programa en lugar de evaporarse una vez que salen del alcance.

+0

No está claro, pero parece que estás mezclando dos significados diferentes de estática en una definición. –

Cuestiones relacionadas