Отказ от ответственности : я прекрасно знаю семантику приращения префикса и постфикса. Поэтому, пожалуйста, не объясните мне, как они работают.
Читая вопросы о переполнении стека, я не могу не заметить, что программисты путаются с оператором приращения postfix снова и снова. Отсюда вытекает следующий вопрос: есть ли случай использования, когда приращение постфикса дает реальную выгоду с точки зрения качества кода?
Позвольте мне уточнить мой вопрос на примере. Вот краткая реализация strcpy
:
while (*dst++ = *src++);
Но это не совсем самодокументируемый код в моей книге (и он вызывает два раздражающих предупреждения на здравомыслящих компиляторах). Так что не так со следующей альтернативой?
while (*dst = *src)
{
++src;
++dst;
}
Затем мы можем избавиться от запутанного назначения в условии и получить код без предупреждений:
while (*src != '\0')
{
*dst = *src;
++src;
++dst;
}
*dst = '\0';
(Да, я знаю, src
и dst
в этих альтернативных решениях будут разные конечные значения, но, поскольку strcpy
сразу возвращается после цикла, в этом случае это не имеет значения.)
Кажется, цель постфиксного приращения - сделать код максимально кратким. Я просто не понимаю, к чему мы должны стремиться. Если это изначально было связано с производительностью, то все еще актуально сегодня?
int c = 0; c++;
strcpy
метод таким способом (по причинам, которые вы уже упомянули).