C++에는 restrict 키워드가 없습니다
결론부터 말씀드리면, C++ 표준에는 restrict라는 키워드가 존재하지 않습니다. C++ 언어 표준 2.11/1절에 정의된 키워드 목록을 아무리 살펴보아도 restrict는 찾아볼 수 없습니다.
restrict는 C99 표준에서 새롭게 도입된 C 언어의 키워드일 뿐이며, C++의 공식 언어 사양에는 포함되어 있지 않습니다.
restrict 한정자란 무엇인가?
C 언어에서 restrict 한정자가 붙은 포인터(또는 참조)는 컴파일러에 대한 일종의 '약속'입니다. 즉, 해당 포인터가 유효한 범위(scope) 내에서 포인터가 가리키는 대상 객체는 오직 이 포인터와 이 포인터로부터 복사된 포인터들을 통해서만 접근된다는 것을 보장합니다.
이러한 약속 덕분에 컴파일러는 포인터 에일리어싱(pointer aliasing) 가능성을 걱정하지 않고, 명령 재배치나 벡터화 등 보다 공격적인 최적화를 수행할 수 있습니다.
C++ 컴파일러의 지원 현황
흥미롭게도 대부분의 C++ 컴파일러 역시 최적화 목적으로 이 개념을 지원합니다. 다만 이는 공식 표준이 아니기 때문에 컴파일러마다 제공하는 방식이 조금씩 다릅니다.
- GCC / Clang:
__restrict__또는__restrict - MSVC:
__restrict
따라서 C++ 코드에서 에일리어싱 관련 최적화 힌트가 필요하다면, 이식성(portability)을 고려하여 매크로 등을 통해 컴파일러별 확장 키워드를 조건부로 사용하는 것이 좋습니다.