10.3.2. Clases anidadas y locales

Puede colocar fácilmente atributos estáticos en clases que están anidadas dentro de otras clases. La definición de tales miembros es intuitiva y obvia (tan sólo utiliza otro nivel de resolución de ámbito). No obstante, no puede tener atributos estáticos dentro de clases locales (una clase local es una clase definida dentro de una función). Por tanto,

//: C10:Local.cpp
// Static members & local classes
#include <iostream>
using namespace std;

// Nested class CAN have static data members:
class Outer {
  class Inner {
    static int i; // OK
  };
};

int Outer::Inner::i = 47;

// Local class cannot have static data members:
void f() {
  class Local {
  public:
//! static int i;  // Error
    // (How would you define i?)
  } x;
} 

int main() { Outer x; f(); } ///:~

Listado 10.21. C10/Local.cpp


Ya puede ver el problema con atributos estáticos en clases locales: ¿Cómo describirá el dato miembro en el ámbito del fichero para poder definirlo? En la práctica, el uso de clases locales es muy poco común.