나는 일반적인 이해가 restrict
이지만 몇 가지 좋은 점을 명확히하기를 바라고 있습니다. 한 버퍼에서 null로 끝나는 문자열을 읽고 다른 버퍼에 URL 인코딩 된 버전을 기록하는 함수가 있습니다. 이 함수는 (현재 restrict
없이)이 서명이 :제한을 사용할 때와하지 않을 때
char const *StringUrlEncode(char const *unencoded,
char *encoded,
char *encodedEnd);
unencoded
내 널 종료 소스 문자열입니다. 위치가 지적를 포함하지 않는 최대하지만 대상 버퍼가 후 첫 문자 으로 버퍼의 제 char
에 encoded
점 encodedEnd
점 버퍼 함수 즉 char
의 물품 것이다 encoded
및 encodedEnd
로 표시되는 ~에 의해 encodedEnd
- 당신이 C++ STL 협약에 익숙하다면 이것은 기본 begin
/end
반복자 쌍입니다.
char const *StringUrlEncode(char const *restrict unencoded,
char *restrict encoded,
char *encodedEnd);
또는 나는 모든 세 개의 매개 변수에 추가하여 이해 아니에요 몇 가지 이점이있다 :
나는이 기능에 restrict
를 추가하는 경우
입력 및 출력 버퍼를 만들면 restrict
은 겹치지 않는다는 것을 컴파일러가 알 수 있도록 도와줍니다. 하지만 마지막 매개 변수 인 encodedEnd
은 출력 버퍼의 끝을 표시하는 데 사용되기 때문에 나는 restrict
이 컴파일러에 도움이되지 않을 것이라고 생각하고 있습니다. 함수 선언에 불필요한 노이즈).
마이크 기사를 읽었습니다. (좋은 글자입니다.) –
주어진 링크는 작동하지 않습니다. Google은 http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html (유효 2009-09-06)에 업데이트 된 버전이 있음을 제안하지만 문제도 있습니다. 캐시 된 버전은 Google에서 사용할 수 있습니다. –