Freigeben über


__restrict

Wie der Modifizierer restrict __declspec gibt das __restrict-Schlüsselwort an, dass ein Symbol im aktuellen Gültigkeitsbereich nicht mit einem Alias versehen ist. Das Schlüsselwort __restrict unterscheidet sich vom restrict __declspec-Modifizierer folgendermaßen:

  • Das Schlüsselwort __restrict ist nur auf Variablen gültig, und __declspec(restrict) ist nur bei Funktionsdeklarationen und -definitionen gültig.

  • Wenn __restrict verwendet wird, gibt der Compiler die Kein-Alias-Eigenschaft einer Variablen nicht weiter. Das bedeutet, dass, wenn Sie eine __restrict-Variable zu einer Nicht-__restrict-Variable zuweisen, impliziert der Compiler nicht, dass die Nicht-__restrict-Variable nicht mit einem Alias versehen ist. Dies unterscheidet sich vom Verhalten des restrict-Schlüsselworts der Spezifikation C99.

Wenn Sie das Verhalten einer vollständigen Funktion beeinflussen, ist es im Allgemeinen besser, __declspec anstatt das Schlüsselwort zu verwenden.

__restrict ähnelt restrict aus der Spezifikation C99, __restrict kann jedoch in C++- oder C-Programmen verwendet werden.

Es gibt keine Unterstützung für __restrict auf C++-Verweisen. 

Hinweis

Bei Verwendung auf einer Variablen, die auch das volatile (C++)-Schlüsselwort aufweist, hat volatile Vorrang.

Beispiel

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

Siehe auch

Referenz

C++-Schlüsselwörter