Когда использовать ограничение, а когда нет

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

Ответы на вопрос(3)

Ваш ответ на вопрос