Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De beperkingsaanduiding kan worden toegepast op functie- en lambda-declaraties. Hiermee worden beperkingen afgedwongen voor de code in de functie en voor het gedrag van de functie in toepassingen die gebruikmaken van de C++ Accelerated Massive Parallelism -runtime (C++ AMP).
Opmerking
Zie restrict voor informatie over het __declspec trefwoord dat deel uitmaakt van de kenmerken van de opslagklasse.
De restrict component heeft de volgende vormen:
| Clausule | Beschrijving |
|---|---|
restrict(cpu) |
De functie kan de volledige C++-taal gebruiken. Alleen andere functies die worden gedeclareerd met behulp van functies voor beperkingen (CPU) kunnen de functie aanroepen. |
restrict(amp) |
De functie kan alleen de subset van de C++-taal gebruiken die C++ AMP kan versnellen. |
Een reeks restrict(cpu) en restrict(amp). |
De functie moet voldoen aan de beperkingen van zowel restrict(cpu) als restrict(amp). De functie kan worden aangeroepen door functies die worden gedeclareerd met behulp van restrict(cpu), restrict(amp)of restrict(cpu, amp)restrict(amp, cpu).Het formulier restrict(A) restrict(B) kan worden geschreven als restrict(A,B). |
Opmerkingen
Het restrict trefwoord is een contextueel trefwoord. De beperkingsaanduidingen cpu en amp zijn geen gereserveerde woorden. De lijst met aanduidingen kan niet worden uitgebreid. Een functie die geen component heeft restrict , is hetzelfde als een functie die de restrict(cpu) component bevat.
Een functie met de restrict(amp) component heeft de volgende beperkingen:
De functie kan alleen functies aanroepen die de
restrict(amp)component hebben.De functie moet inlinable zijn.
De functie kan alleen
int,unsigned int, enfloatdoublevariabelen en klassen en structuren declareren die alleen deze typen bevatten.boolis ook toegestaan, maar moet 4 byte-uitgelijnd zijn als u deze in een samengesteld type gebruikt.Lambda-functies kunnen niet worden vastgelegd met verwijzing en kunnen geen aanwijzers vastleggen.
Verwijzingen en verwijzingen met één indirectie worden alleen ondersteund als lokale variabelen, functieargumenten en retourtypen.
Het volgende is niet toegestaan:
Recursie.
Variabelen die zijn gedeclareerd met het vluchtige trefwoord.
Virtuele functies.
Aanwijzers naar functies.
Aanwijzers naar lidfuncties.
Aanwijzers in structuren.
Aanwijzers naar aanwijzers.
gotoverklaringen.Gelabelde instructies.
try,catchofthrowinstructies.Globale variabelen.
Statische variabelen. Gebruik in plaats daarvan tile_static trefwoord .
dynamic_castWerpt.De
typeidoperator.asm-declaraties.
Varargs.
Zie restrict(amp) beperkingen voor functies voor een bespreking van functiebeperkingen.
Voorbeeld
In het volgende voorbeeld ziet u hoe u de restrict(amp)component gebruikt.
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();
}