En el alcance del archivo, no hay diferencia en C ++. const
hace que el enlace interno sea el predeterminado, y todas las variables globales tienen una vida útil estática. Pero la primera variante tiene el mismo comportamiento en C, por lo que puede ser una buena razón para usarlo.
Dentro de una función, la segunda versión se puede calcular a partir de parámetros. En C o C ++ no tiene que ser una constante de tiempo de compilación como requieren otros lenguajes.
Dentro de una clase, básicamente lo mismo que para las funciones. Se const
puede calcular un valor de instancia en la lista de inicializadores de ctor . A static const
se establece durante la inicialización de inicio y permanece sin cambios para el resto del programa. (Nota: el código para los static
miembros se ve un poco diferente porque la declaración y la inicialización están separadas).
Recuerde, en C ++, const
significa solo lectura , no constante . Si tiene un puntero a, const
entonces otras partes del programa pueden cambiar el valor mientras no está buscando. Si la variable se definió con const
, entonces nadie puede cambiarla después de la inicialización, pero la inicialización puede ser arbitrariamente compleja.
static
es probablemente la palabra clave más sobrecargada en C ++. El significado de su código varía ampliamente dependiendo de si está en el alcance del espacio de nombres, en el alcance de la clase o en el alcance de la función. Es posible que desee aclarar eso.::
sin identificador en el frente). No conozco ninguna diferencia significativa entre el espacio de nombres global y cualquier espacio de nombres anidado en él. Ciertamente no hay ninguno con respecto a losstatic
objetos.