En el alcance del archivo, no hay diferencia en C ++. consthace 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 constpuede calcular un valor de instancia en la lista de inicializadores de ctor . A static constse establece durante la inicialización de inicio y permanece sin cambios para el resto del programa. (Nota: el código para los staticmiembros se ve un poco diferente porque la declaración y la inicialización están separadas).
Recuerde, en C ++, constsignifica solo lectura , no constante . Si tiene un puntero a, constentonces 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.
statices 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.