Ich bin auf dieses For-Loop-Layout gestoßen:
#include <iostream>
int main()
{
{
for (int i = 0; i != 10; ++i)
{
std::cout << "delete i->second;" << std::endl;
}
}
{
for (size_t i = 0; i < 20; ++i)
{
std::cout << "delete m_indices[i];" << std::endl;
}
}
return 0;
}
Ich habe mich gefragt, wozu diese zusätzliche Schicht von Zahnspangen gut ist. Dies erscheint einige Male in unserer Codebasis.
Antworten:
Es war einmal, vor vielen Monden, VS6 existierte und war beliebt. Es entsprach jedoch nicht einer Reihe von C ++ - Standards. Dies war zu dem Zeitpunkt angemessen, als der Standard kurz vor (im selben Jahr) offiziell veröffentlicht wurde. Soweit mir bekannt ist, hat es sich jedoch an den Entwurf des Standards gehalten.
Einer der Standards, die sich zwischen dem Entwurf und dem offiziellen Standard geändert haben, war die Lebensdauer der im ersten Abschnitt erstellten for-Schleifenvariablen. Dies führt dazu, dass der folgende Code nicht kompiliert werden kann
weil
i
wurde von der Sekunde für Schleife neu definiert.Während andere Compiler ebenfalls unter diesem Fehler litten; Ich hebe das VS6 hervor, da es nach der Veröffentlichung des Standards einige Jahre lang die einzige Version von Visual Studio blieb, aber nie ein Update für dieses spezielle Problem veröffentlicht hat. was bedeutet, dass es einen größeren Einfluss hatte.
Eine Lösung hierfür besteht darin, die gesamte for-Schleife in einen eigenen Bereich zu zwingen, wie Sie gezeigt haben.
quelle
{
und}
erstellt einen Bereich. Wenn Sie einige Variablen im Bereich definieren, können Sie von außen nicht darauf zugreifen. Aberfor
schaffen Sie diesen Bereich bereits. Soist das gleiche wie
Aber wenn Sie etwas zwischen ihnen definieren, gibt es einen Unterschied
In diesem Beispiel ist
a
der Zugriff von außerhalb nicht möglich.quelle
In Ihrem speziellen Beispiel gibt es keinen Grund dafür.
Manchmal möchten Sie möglicherweise einen Bereich für eine Variable erstellen:
Ich sehe dies jedoch als Anti-Muster. Wenn Sie dies benötigen, sollte dies normalerweise
for
eine eigene Funktion sein.quelle
Es ist ein Blockumfang, der durch
{}
geschweifte Klammern gekennzeichnet ist. Es wird normalerweise verwendet, um den Bereich der automatischen Speicherung zu markieren . In Ihrem Fall scheint es nichts zu tun, da die for-Schleife in Standard-C ++ einen eigenen Bereich hat.quelle