Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le spécificateur de restriction peut être appliqué aux déclarations de fonctions et lambda. Il applique des restrictions au code dans la fonction et sur le comportement de cette fonction dans les applications qui utilisent le runtime C++ Accelerated Massive Parallelism (C++ AMP).
Remarque
Pour plus d’informations sur le restrict mot clé qui fait partie des attributs de classe __declspec de stockage, consultez restreindre.
La restrict clause prend les formes suivantes :
| Clause | Description |
|---|---|
restrict(cpu) |
La fonction peut utiliser le langage C++ complet. Seules les autres fonctions déclarées en utilisant des fonctions restrict(cpu) peuvent appeler la fonction. |
restrict(amp) |
La fonction peut uniquement utiliser le sous-ensemble du langage C++ que C++ AMP peut accélérer. |
Séquence de clauses restrict(cpu) et restrict(amp) |
La fonction doit adhérer aux limitations des clauses restrict(cpu) et restrict(amp). La fonction peut être appelée par les fonctions déclarées au moyen de restrict(cpu), restrict(amp), restrict(cpu, amp) ou restrict(amp, cpu).L'expression restrict(A) restrict(B) peut être écrite restrict(A,B). |
Notes
Le restrict mot clé est un mot clé contextuel. Les spécificateurs de restrictions, cpu et amp, ne sont pas des mots réservés. La liste des spécificateurs n'est pas extensible. Une fonction qui n’a pas de restrict clause est identique à une fonction qui a la restrict(cpu) clause.
Une fonction qui possède la clause restrict(amp) présente les limitations suivantes :
La fonction peut appeler uniquement des fonctions qui possèdent la clause
restrict(amp).La fonction doit être en mesure d'être inline.
La fonction peut déclarer uniquement
int,unsigned int,floatet variables, etdoubleclasses et structures qui contiennent uniquement ces types.boolest également autorisé, mais il doit être aligné sur 4 octets si vous l’utilisez dans un type composé.Les fonctions lambda ne peuvent pas capturer par référence et ne peuvent pas capturer les pointeurs.
Les références et les pointeurs à une seule indirection sont pris en charge uniquement en tant que variables locales, arguments de fonction ou types de retour.
Les éléments suivants ne sont pas autorisés :
récurrence,
Variables déclarées avec le mot clé volatile .
fonctions virtuelles,
pointeurs désignant des fonctions,
pointeurs désignant des fonctions membres,
pointeurs dans des structures,
pointeurs désignant des pointeurs,
Instructions
goto.instructions étiquetées,
try,catchouthrowinstructions.Variables globales.
variables statiques Utilisez à la place tile_static mot clé .
dynamic_castJette.opérateur
typeid,déclarations asm,
varargs.
Pour une discussion sur les limitations de fonction, consultez les restrictions de restriction (amp) .
Exemple
L’exemple suivant montre comment utiliser la restrict(amp)clause.
void functionAmp() restrict(amp) {}
void functionNonAmp() {}
void callFunctions() restrict(amp)
{
// int is allowed.
int x;
// long long int is not allowed in an amp-restricted function. This generates a compiler error.
// long long int y;
// Calling an amp-restricted function is allowed.
functionAmp();
// Calling a non-amp-restricted function is not allowed.
// functionNonAmp();
}