Предположим, что:
lpStr1
, lpStr2
и lpStr3
- три указателя, каждый из которых указывает на отдельную строку.
и
str1
, str2
и str3
- три объекта типа std::string
.
Тогда
PathCombine(lpStr1, lpStr2, lpStr3);
похож на
strcpy(lpStr1, lpStr2);
strcat(lpStr1, lpStr3);
это аналогия
str1 = str2 + str3;
и
PathAppend(lpStr1, lpStr2);
похоже на
strcat(lpStr1, lpStr2);
это аналогия
str1 += str2;
, что эквивалентно
str1 = str1 + str2
Теоретически PathAppend
может быть реализовано только с PathCombine
:
PathAppend(lpStr1,lpStr2);
эквивалентно
PathCombine(lpStr1, lpStr1, lpStr2);
Следовательно, каждая задача, которая может быть выполнена с помощью PathAppend
, также может быть выполнена с помощью PathCombine
, но обратное неверно.
Поэтому, пока вы можете выполнить свою задачу с помощью PathAppend
, используйте PathAppend
.
Если ваша задача не может быть выполнена с помощью PathAppend
, но может быть выполнена с помощью PathCombine
, тогда используйте PathCombine
.
Если ваша задача не может быть выполнена с помощью PathCombine
, конечно, она не может быть выполнена с помощью PathAppend
, и вам придется использовать другой API для выполнения вашей задачи.
Причина, по которой всегда используется PathAppend
вместо PathCombine
, , если возможно , заключается в том, что PathAppend
требует меньше параметров, чем PathCombine
, и это также сокращает ваш код.
Если вы можете решить вашу проблему с помощью PathAppend
, но вместо этого вы используете PathCombine
, тогда первый и второй параметры в вызове PathCombine
совпадают, и вы, вероятно, дублируете код и вводите в него больше символов.
В этом случае строка PathCombine
длиннее строки PathAppend
, что делает ваш код также менее читабельным.
Таким образом, использование PathAppend
всегда лучше и продуктивнее, чем PathCombine
, если ваша проблема может быть решена с помощью PathAppend
.
В противном случае, если ваша проблема не может быть решена с помощью PathAppend
, но может быть решена только с PathCombine
, тогда используйте PathCombine
.