У меня есть общее понимание restrict
, но я надеюсь уточнить некоторые тонкости. У меня есть функция, которая считывает строку с нулевым завершением из одного буфера и выписывает версию с кодировкой URL в другом буфере. Функция имеет эту подпись (в настоящее время без restrict
):
char const *StringUrlEncode(char const *unencoded,
char *encoded,
char *encodedEnd);
unencoded
- это исходная строка с нулевым завершением. Буфер назначения представлен encoded
и encodedEnd
, где encoded
указывает на первый char
в буфере, а encodedEnd
указывает на первый char после буфера, то есть функция будет писать char
до, но не включая местоположение, на которое указывает encodedEnd
- это ваша базовая паратера итератора begin
/end
, если вы знакомы с соглашениями STL STL.
Если я добавлю restrict
к этой функции, должен ли он применяться только к первым двум параметрам:
char const *StringUrlEncode(char const *restrict unencoded,
char *restrict encoded,
char *encodedEnd);
или есть какое-то преимущество, которое я не понимаю, добавив его ко всем трем параметрам?
Я вижу, что создание входных и выходных буферов restrict
помогает компилятору понять, что они не перекрываются. Но поскольку последний параметр encodedEnd
используется только для обозначения конца выходного буфера, я думаю, что restrict
не будет никакой помощью для компилятора здесь (хотя я предполагаю, что это не повредит, кроме добавления ненужного шума в объявление функции).