Ich bin dabei, etwas in meiner Boost-Asio-Socket-Kommunikation zu debuggen. Und fand dieses Stück Code in der Asio-Bibliothek (zu finden in boost / asio / impl / write.hpp Zeile 169 (Boost 1.47)):
%Vor%Ich habe schon viele Jahre C / C ++ Entwicklungserfahrung, aber nie in meinem Leben habe ich solch eine seltsame Implementierung gesehen. Schauen Sie dort, das Standard-Label der switch-Anweisung ist innerhalb der for-Schleife.
Wenn ich das richtig verstehe, dann wird die switch-Anweisung "missbraucht" anstatt eines goto, rechts (für die Fälle, wo start! = 1, goto default :)? Ist es tatsächlich ein gültiges C / C ++ in Bezug auf den Standard? Was passiert, wenn ich zum Beispiel
setze %Vor%anstelle der for-Schleife im ursprünglichen Code. Wird "i" undefiniert sein, wenn der Sprung zur Standardeinstellung ausgeführt wird: label? Sicher, ich könnte hier einen Debugger verwenden, aber das scheint mir so verdächtig, dass ich denke, dass dies ein anderes Verhalten für verschiedene Compiler erzeugen könnte.
Dies ist ein gut definierter, gültiger Code. A switch
ist wirklich eine verherrlichte goto
. Schauen Sie sich das Duff-Gerät an, um etwas clever mit diesem Konstrukt zu arbeiten.
Was Ihr for
betrifft, wäre das nicht legal. Ein Sprung zu einer Groß- / Kleinschreibung kann eine Initialisierung nicht überschreiten.
Tags und Links c++ boost boost-asio