Unbenannte Schleifenvariable in bereichsbasierter for-Schleife?

8

Gibt es eine Möglichkeit, die Schleifenvariable nicht in einer bereichsbasierten for-Schleife zu "benutzen", sondern Compilerwarnungen darüber zu vermeiden, dass sie unbenutzt ist?

Für den Kontext versuche ich etwas wie das Folgende. Ich habe "Warnungen als Fehler behandeln" aktiviert, und ich würde lieber keinen Hack machen, der die Variable zwingt, "benützt" zu werden, indem man sie sinnlos irgendwo erwähnt.

%Vor%

Ich weiß, dass es andere Möglichkeiten gibt, dies zu tun, aber nehmen wir als Argument an, dass ich eine bereichsbasierte for-Schleife verwenden muss.

    
Karu 15.02.2014, 01:38
quelle

4 Antworten

5

Sie können immer explizit angeben, dass die Variable im Schleifenrumpf garantiert nicht verwendet wird:

%Vor%

Das Obige ist jedoch viel weniger klar als einfach eine gewöhnliche for -loop zu verwenden.

Ganz zu schweigen von dem Aufruf von size .

    
Cheers and hth. - Alf 15.02.2014 03:59
quelle
4

Ich denke, dass aus diesem Grund std :: for_each , wie folgt:

%Vor%

Wenn Sie jedoch die Größe eines Containers ermitteln möchten, verwenden Sie std :: distance

%Vor%     
Khurshid 15.02.2014 04:23
quelle
4

Sie können ein Makro definieren:

%Vor%

Es funktioniert gut mit GCC und CLANG (nicht so sicher über MSVC ... Ich glaube mich zu erinnern, dass MSVC die Warnung für den Rest der Datei deaktiviert).

Auch:

%Vor%

funktioniert auf allen Compilern und sollte keinen Overhead haben ( Mailbag: Shut-up Compilerwarnungen ).

Der Boost-Header <boost/core/ignore_unused.hpp> ( Boost & gt; = 1.56) definiert für denselben Zweck die Funktionsvorlage boost::ignore_unused() .

Mit C ++ 11 ist auch std::ignore eine gute Wahl:

> %Vor%

Ähnliche Fragen:

PS C ++ 17 scheint ein [[maybe_unused]] -Attribut zu bekommen, um eine standardisierte Deklaration zu ermöglichen eine nicht verwendete Variable.

    
manlio 15.02.2014 16:10
quelle
0

Eine Option besteht darin, die Tatsache auszunutzen, dass Compiler im Allgemeinen nicht über unbenutzte Variablen warnen, wenn sie nicht-triviale Destruktoren haben, und einen generischen Template-Wrapper schreiben, um die tatsächlichen Werte zu iterieren und Dummy-Objekte zurückzugeben. Etwas wie das:

%Vor%

Sie können es wie folgt verwenden:

%Vor%     
ioctl 19.05.2015 21:19
quelle

Tags und Links