Condividi tramite


__restrict

Come il modificatore restrict __declspec, la __restrict parola chiave indica che per un simbolo non viene utilizzato un alias nell'ambito corrente. Tra la parola chiave __restrict e il modificatore restrict __declspec esistono le differenze seguenti:

  • La parola chiave __restrict è valida solo per variabili, mentre __declspec(restrict) è valido solo per le dichiarazioni e le definizioni di funzione.

  • Quando si utilizza __restrict, il compilatore non trasferirà la proprietà noalias di una variabile. In altre parole, se si assegna una variabile __restrict a una variabile non-__restrict, per il compilatore non è implicito che per la variabile non-__restrict non venga utilizzato un alias. Questo comportamento è diverso da quello della parola chiave restrict della specifica C99.

In generale, se si è interessati al comportamento di un'intera funzione, è preferibile utilizzare __declspec anziché la parola chiave.

__restrict è analogo a restrict nella specifica C99, ma è possibile utilizzare __restrict in programmi C++ o C.

Nei riferimenti C++ non è presente alcun supporto per __restrict. 

Nota

Se utilizzato in una variabile cui è associata la parola chiave volatile (C++), volatile avrà la precedenza.

Esempio

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

Vedere anche

Riferimenti

Parole chiave C++