8.2 Ограничение алиасинга указателей
Как и интерфейсная часть для C, G++ поддерживает возможность C99 использовать ограниченные указатели, задаваемые с помощью квалификатора типа __restrict__ или __restrict. Поскольку компилировать C++ с указанием языкового флага -std=c99 нельзя, restrict не является ключевым словом в C++.
Помимо ограниченных указателей можно задавать ограниченные ссылки, указывая тем самым, что ссылка не имеет алиасов в локальном контексте.
void fn (int *__restrict__ rptr, int &__restrict__ rref)
{
/* … */
}
В теле fn rptr указывает на целое число, не имеющее алиасов, а rref ссылается на другое целое число, также не имеющее алиасов.
Также можно указать, что указатель this функции-члена не имеет алиасов, используя __restrict__ в качестве квалификатора функции-члена.
void T::fn () __restrict__
{
/* … */
}
В теле T::fn this имеет эффективное определение T *__restrict__ const this. Обратите внимание, что интерпретация квалификатора функции-члена __restrict__ отличается от интерпретации квалификатора const или volatile: он применяется к указателю, а не к объекту. Это согласуется с поведением других компиляторов, поддерживающих ограниченные указатели.
Как и все квалификаторы параметров верхнего уровня, __restrict__ игнорируется при сопоставлении определений функций. Это означает, что достаточно указать __restrict__ в определении функции, а в её прототипе указывать его не требуется.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Restricted-Pointers.html