Oświadczenie : Doskonale znam semantykę przyrostu przedrostka i przyrostka. Więc proszę, nie wyjaśniaj mi, jak działają.
Czytając pytania na temat przepełnienia stosu, nie mogę nie zauważyć, że programiści wpadają w zamieszanie przez operatora przyrostu Postfiksa w kółko. Z tego wynika następujące pytanie: czy jest jakikolwiek przypadek użycia, w którym przyrostek Postfiksa zapewnia rzeczywistą korzyść pod względem jakości kodu?
Pozwól mi wyjaśnić moje pytanie za pomocą przykładu. Oto super-krótka implementacja strcpy
:
while (*dst++ = *src++);
Ale to nie jest najbardziej samok dokumentujący się kod w mojej książce (i generuje dwa irytujące ostrzeżenia w rozsądnych kompilatorach). Więc co jest nie tak z następującą alternatywą?
while (*dst = *src)
{
++src;
++dst;
}
Możemy wtedy pozbyć się mylącego przypisania w stanie i uzyskać całkowicie bez ostrzeżenia kod:
while (*src != '\0')
{
*dst = *src;
++src;
++dst;
}
*dst = '\0';
(Tak, wiem src
i dst
będą miały różne wartości końcowe w tych alternatywnych rozwiązaniach, ale ponieważ strcpy
natychmiast powraca po pętli, w tym przypadku nie ma to znaczenia).
Wydaje się, że celem przyrostu postfiksowego jest uczynienie kodu możliwie najkrótszym. Po prostu nie rozumiem, o co powinniśmy dążyć. Jeśli pierwotnie chodziło o wydajność, czy nadal jest aktualne?
int c = 0; c++;
strcpy
metodę w ten sposób (z powodów, o których już wspomniałeś).