Versteht diesen Code nicht (er läuft ohne Bedingung)

8

Ich lerne C ++ und habe das in keinem der Bücher, die ich gelesen habe, wirklich gesehen. Ich wollte Code lesen und kommentieren, damit ich besser lernen kann und auf einen seltsamen Codeabschnitt gestoßen bin, der ausgeführt wird, aber keine Bedingung hat. Von dem was ich lese (und von meinen Erfahrungen mit anderen Sprachen, brauchst du ein if, while, for oder sowas für Blöcke).

Ich schaue mir das tbb-threads-Paket an, also bin ich mir nicht sicher, ob es mit dem Starten von threads oder C ++ - spezifisch zu tun hat (wenn Sie das nicht als etwas in C ++ üblich kennen, dann wahrscheinlich tdd-spezifisch).

Ich glaube, ich verstehe, was der Code tatsächlich macht, aber ich bin mir nicht sicher, wie er ausgelöst wird oder läuft. Irgendwelche Ideen?

Hier ist der Abschnitt:

%Vor%

ps. Wenn es hier hilft, ist die gesamte Datei (der obige Code ist in der Mitte der Haupt ()).

%Vor%     
Lostsoul 15.05.2012, 01:36
quelle

4 Antworten

18

Nein, Sie benötigen keine Anweisung if oder while , um eine neue Ebene des Bereichs einzuführen. Grundsätzlich öffnet das Symbol% ​​co_de% eine neue Scope-Ebene und { beendet sie. Es gelten die üblichen Scoping-Regeln, zum Beispiel sind Variablen, die in diesem neuen Block definiert sind, außerhalb undefiniert, am Ende des Block-Objekts werden Destruktoren ausgeführt, und Variablen, die wie oben in einer Scope-Ebene benannt sind, werden schattiert.

Ein häufiger Anwendungsfall ist in } -Aussagen. Zum Beispiel

%Vor%

Ohne die switch { in den case-Anweisungen beschweren sich die Compiler über mehrfach definierte Bezeichner.

    
sashang 15.05.2012, 01:40
quelle
7
___ qstnhdr ___ Versteht diesen Code nicht (er läuft ohne Bedingung) ___ qstntxt ___

Ich lerne C ++ und habe das in keinem der Bücher, die ich gelesen habe, wirklich gesehen. Ich wollte Code lesen und kommentieren, damit ich besser lernen kann und auf einen seltsamen Codeabschnitt gestoßen bin, der ausgeführt wird, aber keine Bedingung hat. Von dem was ich lese (und von meinen Erfahrungen mit anderen Sprachen, brauchst du ein if, while, for oder sowas für Blöcke).

Ich schaue mir das tbb-threads-Paket an, also bin ich mir nicht sicher, ob es mit dem Starten von threads oder C ++ - spezifisch zu tun hat (wenn Sie das nicht als etwas in C ++ üblich kennen, dann wahrscheinlich tdd-spezifisch).

Ich glaube, ich verstehe, was der Code tatsächlich macht, aber ich bin mir nicht sicher, wie er ausgelöst wird oder läuft. Irgendwelche Ideen?

Hier ist der Abschnitt:

%Vor%

ps. Wenn es hier hilft, ist die gesamte Datei (der obige Code ist in der Mitte der Haupt ()).

%Vor%     
___ answer10593166 ___

Sie können zusätzliche Blöcke wie diesen erstellen. Sie werden verwendet, um eine zusätzliche Ebene des Geltungsbereichs aufzuerlegen. In Ihrem Beispiel wird G vor oder nach diesem Block nicht existieren.

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer10593162 ___

Nein, Sie benötigen keine Anweisung { oder } , um eine neue Ebene des Bereichs einzuführen. Grundsätzlich öffnet das Symbol% ​​co_de% eine neue Scope-Ebene und g beendet sie. Es gelten die üblichen Scoping-Regeln, zum Beispiel sind Variablen, die in diesem neuen Block definiert sind, außerhalb undefiniert, am Ende des Block-Objekts werden Destruktoren ausgeführt, und Variablen, die wie oben in einer Scope-Ebene benannt sind, werden schattiert.

Ein häufiger Anwendungsfall ist in root_set -Aussagen. Zum Beispiel

%Vor%

Ohne die Lock { ... } in den case-Anweisungen beschweren sich die Compiler über mehrfach definierte Bezeichner.

    
___ answer10593190 ___

Wenn Sie darauf verweisen, dass der Codeblock einen zusätzlichen Satz von geschweiften Klammern hat, ist dies in der C ++ - Programmierung nicht ungewöhnlich, wenn es sich um kurzlebige Objekte auf dem Stapel handelt, in diesem Fall die Lock und %code% Objekte. Ein Paar geschweifte Klammern erstellt einen neuen Bereich. Sie müssen nicht an Kontrollanweisungen angehängt werden. In diesem Fall wird also ein temporärer Bereich verwendet, um sicherzustellen, dass die Objekte %code% und %code% schnell freigegeben werden, wenn sie den Gültigkeitsbereich verlassen. Wenn die zusätzlichen geschweiften Klammern nicht vorhanden sind, werden die Objekte erst bei der nächsten Iteration der äußeren %code% -Schleife freigegeben.

    
___
Praetorian 15.05.2012 01:44
quelle
4

Wenn Sie darauf verweisen, dass der Codeblock einen zusätzlichen Satz von geschweiften Klammern hat, ist dies in der C ++ - Programmierung nicht ungewöhnlich, wenn es sich um kurzlebige Objekte auf dem Stapel handelt, in diesem Fall die Graph und std::vector<Cell*> Objekte. Ein Paar geschweifte Klammern erstellt einen neuen Bereich. Sie müssen nicht an Kontrollanweisungen angehängt werden. In diesem Fall wird also ein temporärer Bereich verwendet, um sicherzustellen, dass die Objekte Graph und vector schnell freigegeben werden, wenn sie den Gültigkeitsbereich verlassen. Wenn die zusätzlichen geschweiften Klammern nicht vorhanden sind, werden die Objekte erst bei der nächsten Iteration der äußeren for -Schleife freigegeben.

    
Remy Lebeau 15.05.2012 01:44
quelle
2

Sie können zusätzliche Blöcke wie diesen erstellen. Sie werden verwendet, um eine zusätzliche Ebene des Geltungsbereichs aufzuerlegen. In Ihrem Beispiel wird G vor oder nach diesem Block nicht existieren.

    
Oleksi 15.05.2012 01:40
quelle

Tags und Links

Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ answer33878132 ___

Mit %code% Library wird es sehr einfach.

Von JSON String zu ArrayList des Objekts als:

%Vor%

Und zu Json von Array Liste von Objekt als:

%Vor%

Die Gson Library ist einfacher zu benutzen als %code% und %code% implementation.

    
___ answer10796950 ___

Probieren Sie gson: Serialisieren und Deserialisieren- Generische Typen

    
___ answer10796953 ___

json-lib ist wahrscheinlich die Bibliothek, nach der Sie suchen. Hier finden Sie einige Beispiele .

    
___ answer10798476 ___

Wenn Sie Object direkt json zuordnen oder json in ein Objekt konvertieren möchten, können Sie die GSON-Bibliothek verwenden. Dies gibt Ihnen mehr Flexibilität und Kontrolle.

Download-Link - Ссылка

Übungslink - Ссылка

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123json ___ JSON (JavaScript Object Notation) ist ein Textdatenaustauschformat und sprachunabhängig. Verwenden Sie dieses Tag, wenn dieses Textformat beteiligt ist. VERWENDEN SIE DIESEN TAG NICHT FÜR NATIVE JAVASCRIPT-OBJEKTE ODER JAVASCRIPT OBJECT LITERALS. Bevor Sie eine Frage stellen, wenn Sie glauben, dass Ihre JSON-Datei gültig ist, überprüfen Sie sie bitte in einem JSON-Validator wie JSONLint, damit Ihre Frage beantwortet wird, bevor Sie sie stellen. ___ tag123list ___ Liste kann sich beziehen auf: eine verkettete Liste (eine geordnete Menge von Knoten, die jeweils auf ihren Nachfolger verweisen) oder eine Form eines dynamischen Arrays. Um nicht für HTML-Listen verwendet zu werden, verwenden Sie stattdessen [html-lists]. ___ tag123arraylist ___ Ein einfacher Sammeldatentyp, der in einigen Sprachen / Plattformen gefunden wird (z. B. in Java oder .NET). ___ answer10798055 ___

Ich denke, Sie müssen die JETTISON JAR-Datei nicht herunterladen.

Mit %code% und %code% können Sie diese Liste einfach in ein JSON-Objekt wie @Juniad answer

konvertieren     
___ qstntxt ___

Ich habe eine Klasse namens

%Vor%

Ich habe eine Methode, die List-Objekt wie

zurückgibt %Vor%

Ich muss diese Liste wie folgt in JSONArray konvertieren

%Vor%

Kann mir jemand helfen, das zu bekommen? Danke im Advancee ..

    
___ answer10797047 ___

Sie müssen das %code% jar in Ihr Projekt einfügen und die erforderlichen Klassen importieren.

%Vor%     
___