Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penentu pembatasan dapat diterapkan ke fungsi dan deklarasi lambda. Ini memberlakukan pembatasan pada kode dalam fungsi dan pada perilaku fungsi dalam aplikasi yang menggunakan runtime C++ Accelerated Massive Parallelism (C++ AMP).
Catatan
Untuk informasi tentang restrict kata kunci yang merupakan bagian __declspec dari atribut kelas penyimpanan, lihat membatasi.
Klausa restrict mengambil formulir berikut:
| Klausul | Deskripsi |
|---|---|
restrict(cpu) |
Fungsi ini dapat menggunakan bahasa C++ lengkap. Hanya fungsi lain yang dideklarasikan dengan menggunakan fungsi restrict(cpu) yang dapat memanggil fungsi . |
restrict(amp) |
Fungsi ini hanya dapat menggunakan subset bahasa C++ yang dapat dipercepat C++ AMP. |
Urutan restrict(cpu) dan restrict(amp). |
Fungsi harus mematuhi batasan keduanya restrict(cpu) dan restrict(amp). Fungsi ini dapat dipanggil oleh fungsi yang dideklarasikan dengan menggunakan restrict(cpu), , restrict(amp)restrict(cpu, amp), atau restrict(amp, cpu).Formulir restrict(A) restrict(B) dapat ditulis sebagai restrict(A,B). |
Keterangan
Kata restrict kunci adalah kata kunci kontekstual. Penentu pembatasan, cpu dan amp bukan kata yang dipesan. Daftar penentu tidak dapat diperluas. Fungsi yang tidak memiliki restrict klausa sama dengan fungsi yang memiliki restrict(cpu) klausa.
Fungsi yang memiliki restrict(amp) klausa memiliki batasan berikut:
Fungsi ini hanya dapat memanggil fungsi yang memiliki
restrict(amp)klausa.Fungsi harus inlinable.
Fungsi ini hanya
intdapat mendeklarasikan variabel ,unsigned int,float, dandouble, serta kelas dan struktur yang hanya berisi jenis ini.booljuga diizinkan, tetapi harus selaras 4-byte jika Anda menggunakannya dalam jenis majemuk.Fungsi Lambda tidak dapat menangkap dengan referensi dan tidak dapat menangkap pointer.
Referensi dan pointer tidak langsung tunggal hanya didukung sebagai variabel lokal, argumen fungsi, dan jenis pengembalian.
Berikut ini tidak diperbolehkan:
Rekursi.
Variabel dideklarasikan dengan kata kunci volatil .
Fungsi virtual.
Penunjuk ke fungsi.
Penunjuk ke fungsi anggota.
Penunjuk dalam struktur.
Penunjuk ke penunjuk.
gotoPernyataan.Pernyataan berlabel.
try,catch, atauthrowpernyataan.Variabel global.
Variabel statis. Gunakan kata kunci tile_static sebagai gantinya.
dynamic_castGips.Operator.
typeiddeklarasi asm.
Varargs.
Untuk diskusi batasan fungsi, lihat pembatasan batasan(amp).
Contoh
Contoh berikut menunjukkan cara menggunakan restrict(amp)klausa.
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();
}