depende del contexto:
Como muchas cosas en C++, static
significa cosas diferentes dependiendo de su contexto.
Es muy común en C++ que la misma palabra signifique cosas diferentes según su contexto.
Por ejemplo:
*
se usa para la multiplicación, eliminación de referencias a un puntero, y la creación de punteros.
&
se usa para obtener la dirección de las variables, para declarar una referencia y como un operador AND bit a bit.
uso global de la estática:
Si se declara una función o variable como fuera estática de una clase y de alcance mundial, que es específico para ese archivo. Si intenta usar esa variable o función en un archivo diferente (a través de una declaración directa) obtendrá un error de enlace.
Ejemplo:
a.cpp:
static void fn()
{
cout<<"hello a!"<<endl;
}
b.cpp:
void fn();
void gn()
{
fn();//causes linking error
}
Esta característica le permite utilizar una función que ningún otro archivo verá nunca, de esa manera no causar posibles errores de enlazador de un símbolo definido varias veces. El método preferido para hacer esto es con espacios de nombres anónimos sin embargo:
a.cpp:
namespace
{
void fn() // will be static to a.cpp
{
cout<<"hello a!"<<endl;
}
}
Dentro de un uso de clases de estática:
Si se declara una función o variable estática dentro de un clase (o estructura), es una función de clase o variable de clase. Esto significa que solo hay una para toda esa clase. Una función de clase solo puede usar variables de clase.Una variable de clase se comparte entre todas las instancias de esa clase.
class C
{
public:
static void fn()
{
y = 4;//<--- compiling error
// can't access member variable within a static function.
}
int y;
}
Esta es una gran característica de usar si usted tiene algo que es específico de la clase de los objetos, pero no a una instancia específica.
Dentro de un uso de la función estática:
Si se declara una variable estática como en el interior de una función, se puede considerar que el valor de la variable se mantendrá cuando se reciban llamadas. Solo se inicializará una vez.
Ejemplo:
//Will print 0, then 1, then 2, ...
void persistentPrintX()
{
static int x = 0;
cout << x << endl;
x++;
}
personalmente tratar de evitar esto, y probablemente debería hacerlo. No es bueno tener un estado global. Es mejor tener funciones que, con la misma entrada, garanticen el mismo resultado.
Al igual que en el idioma Inglés:
El concepto de significado contextual no es específico para C++, incluso se puede ver que en el idioma Inglés.
- voy a
screen
una película (significa mostrar la película)
- El
screen
en el televisor se rompe (Se refiere a una parte del televisor)
Otros significados en otros lenguajes de programación :
Según el lenguaje de programación puede haber un significado diferente, pero lo primero que la mayoría de la gente piensa cuando dice static
es una clase vari capaz/función vs una variable/función miembro.
¿Está preguntando específicamente sobre las funciones declaradas fuera de una clase/estructura? – Bill
Estaba preguntando en general, gracias por el comentario, pero Brian ya respondió mis preguntas. – Dooms101