__restrict

Podobnie jak modyfikator ograniczenie __declspec , słowo kluczowe __restrict wskazuje, że symbol nie ma aliasu w bieżącym zakresie.Słowo kluczowe __restrict różni się od modyfikatora restrict __declspec w następujący sposób:

  • Słowa kluczowego __restrict można używać tylko ze zmiennymi, a __declspec(restrict) jest prawidłowe tylko dla deklaracji i definicji funkcji.

  • Gdy __restrict zostanie użyty, kompilator nie będzie propagować właściwości no-alias zmiennej.To znaczy jeśli przypiszesz zmienną __restrict do zmiennej, która nie jest __restrict, kompilator nie założy, że zmienna, która nie jest __restrict nie posiada aliasu.To różni się od zachowania słowa kluczowego restrict ze specyfikacji C99.

Ogólnie rzecz biorąc, jeśli zostanie zmienione zachowanie całej funkcji, lepiej jest używać __declspec niż słowa kluczowego.

__restrict jest podobny do restrict ze specyfikacji C99, ale __restrict może być używane w języku C++ lub C.

Dla __restrict nie ma wsparcia w odwołaniach C++. 

[!UWAGA]

Gdy jest używany ze zmienną, która posiada również słowo kluczowe volatile (C++), priorytet ma volatile.

Przykład

// __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;
};

Zobacz też

Informacje

Słowa kluczowe języka C++