У меня есть общее понимание 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 не будет никакой помощью для компилятора здесь (хотя я предполагаю, что это не повредит, кроме добавления ненужного шума в объявление функции).
