Spec-Zone.ru › GCC 15

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API