Haben C ++ - Blöcke {} negative Auswirkungen?

8

Ich habe kürzlich entdeckt, dass {} Blöcke alleine verwendet werden können. Für mich kann dies in einigen Fällen wirklich hilfreich Lesbarkeit Zum Beispiel im folgenden Code:

%Vor%

Kann (ohne IDE-Auto-Indentation zu kämpfen) werden:

%Vor%

Abgesehen von der subjektiven Meinung über Stil, hat dies negative Auswirkungen (wie weniger Optimierungen durch den Compiler, sie haben eine andere Verwendung, etc.) oder sind diese Blöcke sicher zu verwenden.

    
Ross 13.10.2013, 20:17
quelle

3 Antworten

12

Wenn sie die Bedeutung des Codes nicht ändern (wie in Ihrem Beispiel), gibt es keinen Grund, dass sie Auswirkungen auf die Optimierung haben sollten. Wenn sie es tun, dann ist es eine Eigenart eines bestimmten Compilers.

Um zu gewährleisten, dass Ihre pop() -Aufrufe Ihre push() -Aufrufe zuordnen, können Sie dies sogar tun:

%Vor%

...

%Vor%

Das Muster wird allgemein RAII genannt. Es tut ändert die Bedeutung des Codes, obwohl - in meinem Code pop() wird aufgerufen, wenn einer der Aufrufe von foo() eine Ausnahme auslöst, in Ihrem wird es nicht. In den meisten (aber nicht allen) Situationen, in denen Sie vor der Rückgabe etwas rückgängig machen müssen, müssen Sie auch eine Ausnahme rückgängig machen.

    
Steve Jessop 13.10.2013 21:57
quelle
10

Alles an Ihrem zweiten Beispiel ist 100% in Ordnung. Die zusätzlichen Blöcke können den Umfang der darin deklarierten Variablen beeinflussen, aber Sie tun nichts davon.

    
Carl Norum 13.10.2013 20:18
quelle
3

Das Erstellen solcher Blöcke erzeugt neue Bereiche. Daher werden Konstruktoren und Destruktoren beim Eintreten und Verlassen dieser Bereiche ausgeführt. Sie werden auch mehr Chancen haben, sich gegenseitig zu verstecken. Sie sind sicher zu verwenden, aber Sie müssen diese Dinge im Hinterkopf behalten.

Übrigens, das ist subjektiv, aber ich finde Ihre Verwendung von Scopes nicht als Hilfe zur Lesbarkeit. Sie hätten dasselbe mit leeren Zeilen erreichen können. Wenn ich Ihren Code in einer Rezension gesehen habe, würde ich mich fragen, warum Sie solche Bereiche erstellt haben.

Eine Sache Bereiche sind nützlich für die Steuerung der Lebenszeiten in Verbindung mit RAII style Programmierung . In diesem Beispiel wird ein Gültigkeitsbereich verwendet, um die Zeitdauer zu begrenzen, für die ein Mutex gehalten wird.

%Vor%

Hier ist Lock eine RAII-Stilklasse, die im Konstruktor einen Mutex erwirbt und ihn im Destruktor freigibt. Durch die explizite Verwendung eines Bereichs können Sie begrenzen, wie lange die Sperre beibehalten wird.

    
Brian Neal 14.10.2013 13:23
quelle

Tags und Links