Поделиться через


__restrict

Как и модификатор restrict __declspec, ключевое слово __restrict означает, что в текущей области видимости псевдоним для символа не создается. Ключевое слово __restrict отличается от модификатора restrict __declspec следующим:

  • Ключевое слово __restrict допустимо только в переменных, а __declspec(restrict) — только в объявлениях и определениях функций.

  • Если используется ключевое слово __restrict, компилятор не распространяет свойство переменной no-alias. Иными словами, если переменная с ключевым словом __restrict присвоена переменной без ключевого слова __restrict, то компилятор не будет полагать, что переменная без __restrict не имеет псевдонима. Этим оно отличается от ключевого слова restrict из спецификации C99.

Как правило, если вы намереваетесь подействовать на поведение всей функции, вместо этого ключевого слова лучше использовать __declspec.

Ключевое слово __restrict похоже на ключевое слово restrict из спецификации C99, однако ключевое слово __restrict может использоваться в программах C++ и C.

Ключевое слово __restrict в ссылках C++ не поддерживается. 

Примечание

Если это ключевое слово используется вместе с ключевым словом volatile (C++), то приоритет имеет volatile.

Пример

// __restrict_keyword.c
// compile with: /LD
// In the following function, declare a and b as disjoint arrays
// but do not have same assurance for c and d.
void sum2(int n, int * __restrict a, int * __restrict b, 
          int * c, int * d) {
   int i;
   for (i = 0; i < n; i++) {
      a[i] = b[i] + c[i];
      c[i] = b[i] + d[i];
    }
}

// By marking union members as __restrict, tell compiler that
// only z.x or z.y will be accessed in any given scope.
union z {
   int * __restrict x;
   double * __restrict y;
};

См. также

Ссылки

Ключевые слова в C++