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