__restrict

Wie der Modifizierer restrict __declspec gibt das __restrict-Schlüsselwort an, dass ein Symbol nicht im aktuellen Bereich einen Alias besitzt.Das __restrict-Schlüsselwort unterscheidet sich vom restrict __declspec-Modifizierer in folgender Weise:

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

  • Wenn __restrict verwendet wird, gibt der Compiler nicht die NO-ALIAS-Eigenschaft einer Variablen.Das heißt, wenn Sie eine __restrict-Variable zu einer Nicht-__restrict-Variablen zuweisen, bedeutet der Compiler nicht, dass die Nicht-__restrict-Variable nicht mit einem Alias versehene.Dies unterscheidet sich vom Verhalten des restrict-Schlüsselwort aus der C99- W3C-Spezifikation unterscheidet.

Im Allgemeinen wenn Sie das Verhalten einer kompletten Funktion auswirken, empfiehlt es sich, als __declspec das Schlüsselwort zu verwenden.

__restrict ist mit restrict aus der C99- Spezifikation, aber __restrict kann in C++- oder C-Programmen verwendet werden.

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

HinweisHinweis

Wenn es für eine Variable verwendet wird, die flüchtig (C++) auch das Schlüsselwort aufweist, hat Vorrang volatile .

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