Haftungsausschluss : Ich kenne die Semantik von Präfix und Postfix-Inkrement sehr gut. Erklären Sie mir bitte nicht, wie sie funktionieren.
Beim Lesen von Fragen zum Stapelüberlauf kann ich nicht anders, als zu bemerken, dass Programmierer immer und immer wieder durch den Postfix-Inkrement-Operator verwirrt werden. Daraus ergibt sich die folgende Frage: Gibt es einen Anwendungsfall, bei dem ein Postfix-Inkrement einen echten Vorteil in Bezug auf die Codequalität bietet?
Lassen Sie mich meine Frage an einem Beispiel erläutern. Hier ist eine übersichtliche Implementierung von strcpy
:
while (*dst++ = *src++);
Aber das ist nicht gerade der selbstdokumentierendste Code in meinem Buch (und er erzeugt zwei nervige Warnungen bei vernünftigen Compilern). Also, was ist los mit der folgenden Alternative?
while (*dst = *src)
{
++src;
++dst;
}
Wir können dann die verwirrende Zuordnung in der Bedingung aufheben und erhalten völlig warnfreien Code:
while (*src != '\0')
{
*dst = *src;
++src;
++dst;
}
*dst = '\0';
(Ja, ich weiß src
und dst
werde in diesen alternativen Lösungen unterschiedliche Endwerte haben, aber da es strcpy
sofort nach der Schleife zurückkommt, ist es in diesem Fall egal.)
Es scheint, dass der Zweck des Postfix-Inkrements darin besteht, den Code so knapp wie möglich zu halten. Ich verstehe einfach nicht, wie wir das anstreben sollen. Wenn es ursprünglich um Leistung ging, ist sie heute noch relevant?
int c = 0; c++;
strcpy
Methode auf diese Weise codieren würden (aus Gründen, die Sie bereits erwähnt haben).