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