Klammern an "komischer Stelle"



  • Hi @All,

    ich hab letztens C++Code eines Dritten durchgearbeitet (Einarbeitung in eine Bibliothek).
    Dabei bin ich auf folgenden Code schnipsel gestoßen:

    void foo()
    {
       int bar=42;
       {
          double foobar = bar*4;
          //weiterer Code
       }
       //weiterer Code
    }
    

    Der Code der darin steht ist eigentlich uninteresant, meine Frage bezieht sich auf {} , welche mitten im Code stehen (d.h. nicht für Loops oder If o.Ä. verwendent werden). Wofür sind die gut?

    Danke und mfG
    Hlymur



  • das ist ein eigener Gültigkeitsbereich, dort kannst du lokale Variablen anlegen, die am Ende des Gültigkeitsbereichs wieder zerstört werden.

    int i=1;
    
    {
    int i=5;
    cout<<i; // 5
    }
    
    cout<<i; // 1
    

    Praktisch ist das vor allem wenn du mit Mutex und Lock einen kleinen Teil einer Funktion gegen mehrfachen Zugriff aus unterschiedlichen Threads schützen willst:

    x=a*b;
    {
     CLock myLock(m_MyMutex);
    
    // ab hier bist du "sicher"
    
     globaleVar++;
     if(globaleVar==4)
      globaleVar=x;
    
    // usw...was auch immer du machen willst
    
    // hier wird myLock zerstört, der Destruktor wird aufgerufen, und der Mutex wird freigegeben
    } // CLock::~CLock
    


  • Damit kann man den Scope (Gültigkeitsbereich) einschränken. Auch bei Klassen kann man das manchmal gut einsetzen, da diese anschließend wieder zerstört werden.

    Auch wenn man einen Variablennamen öfter braucht, kann man so Namenskonflikte vermeiden:

    {
     int len = ...;
    
     // ...
    }
    
    // ...
    
    {
     int len = ...;
    
     // ...
    }
    


  • Aso, Dankeschön für die schnelle Information und Hilfe 🙂


Log in to reply