Ich arbeitete an this answer. Und ich lief in ein Rätsel: scanf
has an assignment suppressing '*'
:Ist die wiederholte Zuweisung für get_time definiert?
Wenn diese Option vorhanden ist, wird die Funktion nicht das Ergebnis der Umwandlung in jedem Empfangs Argument zuweisen
Aber wenn in get_time
verwendete '*'
gibt ein Laufzeitfehler auf Visual Studio, libC++ und libstdC++: str >> get_time(&tmbuf, "%T.%*Y")
, also glaube ich, dass es nicht unterstützt wird.
Als solche habe ich Eingang in tmbuf.tm_year
durch das Lesen zweimal zu ignorieren:
str >> get_time(&tmbuf, "%H:%M:%S.%Y UTC %b %d %Y");
This works und scheint bisher meine einzige Möglichkeit zu sein, wie get_time
geht, da die '*'
nicht akzeptiert wird. Aber wie wir alle wissen, bedeutet es nicht, dass es definiert ist, nur weil es funktioniert. Kann jemand das bestätigen:
- Es definiert die gleiche Variable zweimal in
get_time
- Der Strom immer lesen von links nach rechts wird zuweisen, so wird die 1 st Inzidenz von
%Y
gestampft werden, nicht der 2 nd
'get_time' hat nichts mit' scanf' zu tun.Was lässt Sie denken, dass eine der 'scanf'-Regeln für 'get_time' gilt? Was die Gültigkeit der wiederholten Zuweisung anbelangt, sagt der Standard nicht, dass sie ungültig ist, und spezifiziert auch, dass Formatelemente nacheinander von links nach rechts verarbeitet werden. Tatsächlich spezifiziert es den genauen Algorithmus der Verarbeitung der Formatzeichenfolge. Der Algorithmus behandelt solche Fälle ohne Fehler. –
@ n.m. Ich werde mit wehmütigen Gedanken als Antwort auf Ihre Frage gehen. Aber klingt, als ob das sicher ist? Vielleicht würden Sie sich inspirieren lassen, das in eine Antwort einzutippen? –