Cuando tiene una variable global estática en un archivo de encabezado C++, cada unidad de traducción que incluye el archivo de encabezado termina con su propia copia de la variable.Variable global estática utilizada por la función miembro en línea
Sin embargo, si declaro una clase en el mismo archivo de cabecera, y crear una función miembro de esa clase, implementado en línea dentro de la declaración de la clase, que utiliza la variable global estática, por ejemplo:
#include <iostream>
static int n = 10;
class Foo {
public:
void print() { std::cout << n << std::endl; }
};
entonces veo un comportamiento un poco extraño bajo gcc 4.4:
Si compilo sin optimización, todos los usos de la función de miembro de utilizar la copia de la variable de una de las unidades de traducción (la primera que se menciona en el comando g ++ línea).
Si compilo con
-O2
, cada uso de la función miembro utiliza la copia de la variable de la unidad de traducción en la que está hecha la caja.
Obviamente, este es un diseño realmente malo, por lo que esta pregunta es solo por curiosidad. Pero mi pregunta, sin embargo, es ¿qué dice el estándar de C++ sobre este caso? ¿Se está comportando correctamente g ++ dando diferentes comportamientos con o sin optimización habilitada?
Posible duplicado: [palabra clave estática en el archivo h y enlace interno] (http://stackoverflow.com/questions/4276794/static-keyword-in-h-file-and-internal-linkage). –