Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'indicatore di restrizione può essere applicato a dichiarazioni lambda e di funzione. Tale indicatore applica restrizioni sul codice della funzione e sul comportamento della funzione nelle applicazioni che utilizzano il runtime C++ AMP (Accelerated Massive Parallelism) di C++.
Nota
Per informazioni sulla restrict parola chiave che fa parte degli attributi della __declspec classe di archiviazione, vedere Restrict.
La restrict clausola accetta i formati seguenti:
| Clausola | Descrizione |
|---|---|
restrict(cpu) |
La funzione può utilizzare il linguaggio C++ completo. Solo altre funzioni dichiarate tramite le funzioni restrict(cpu) possono chiamare la funzione. |
restrict(amp) |
La funzione può utilizzare solo un subset del linguaggio C++ che C++ AMP può accelerare. |
Sequenza di restrict(cpu) e restrict(amp). |
La funzione deve rispettare le limitazioni sia di restrict(cpu) che di restrict(amp). La funzione può essere chiamata dalle funzioni dichiarate tramite restrict(cpu), restrict(amp), restrict(cpu, amp) o restrict(amp, cpu).La forma restrict(A) restrict(B) può essere scritta come restrict(A,B). |
Osservazioni:
La restrict parola chiave è una parola chiave contestuale. Gli indicatori di restrizione cpu e amp non sono parole chiave riservate. L'elenco degli indicatori non è estensibile. Una funzione che non dispone di una restrict clausola è uguale a una funzione con la restrict(cpu) clausola .
Una funzione con la clausola restrict(amp) è caratterizzata dalle limitazioni seguenti:
La funzione può chiamare solo funzioni con la clausola
restrict(amp).È necessario che sia possibile rendere la funzione inline.
La funzione può dichiarare solo
intle variabili ,unsigned intfloat, edoublele classi e le strutture che contengono solo questi tipi.boolè anche consentito, ma deve essere allineato a 4 byte se lo si usa in un tipo composto.Le funzioni lambda non possono essere acquisite per riferimento e non possono acquisire puntatori.
I riferimenti e i puntatori con riferimento indiretto singolo sono supportati solo come variabili locali, argomenti di funzione e tipi restituiti.
Gli elementi seguenti non sono consentiti:
Ricorsione.
Variabili dichiarate con la parola chiave volatile .
Funzioni virtuali.
Puntatori a funzioni.
Puntatori a funzioni membro.
Puntatori in strutture.
Puntatori a puntatori.
Istruzioni
goto.Istruzioni con etichetta.
tryIstruzioni ,catchothrow.Variabili globali.
Variabili statiche. Usare invece tile_static Parola chiave .
dynamic_castCast.Operatore
typeid.Dichiarazioni asm.
Funzioni varargs.
Per una descrizione delle limitazioni delle funzioni, vedere Limitazioni (amp) .
Esempio
Nell'esempio seguente viene illustrato come usare la restrict(amp)clausola .
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();
}