Rumah >pembangunan bahagian belakang >C++ >Apa yang Mentakrifkan 'Konteks Segera' dalam C 11 SFINAE?
Konteks Segera dalam C 11 SFINAE
Piawaian C 11 mentakrifkan SFINAE (Kegagalan Penggantian Bukan Ralat) sebagai teknik untuk membolehkan secara bersyarat atau melumpuhkan kod berdasarkan potongan hujah templat. Bahagian 14.8.2/8 menggariskan syarat kegagalan penggantian untuk mengakibatkan ralat kompilasi "keras" atau ralat "lembut" yang membawa kepada SFINAE.
Standard merujuk kepada "konteks segera" dalam bahagian ini , menunjukkan bahawa hanya jenis dan ungkapan yang tidak sah dalam konteks segera jenis fungsi dan jenis parameter templatnya boleh menyebabkan kegagalan potongan. Walau bagaimanapun, takrifan "konteks segera" tidak jelas.
Prosedur Keputusan untuk Konteks Segera
Untuk menentukan sama ada ralat penggantian berlaku dalam konteks segera, pertimbangkan berikut:
Bayangkan semua templat dan fungsi yang ditakrifkan secara tersirat diperlukan untuk penggantian hujah templat dihasilkan terlebih dahulu. Sebarang ralat yang berlaku semasa penyediaan ini tidak berada dalam konteks segera dan akan mengakibatkan ralat penyusunan yang sukar.
Jika langkah penyediaan berjaya diselesaikan, sebarang ralat seterusnya semasa penggantian (cth., merujuk kepada templat instan atau fungsi yang ditakrifkan secara tersirat dalam tandatangan templat fungsi) tidak membentuk ralat tetapi mengakibatkan potongan kegagalan.
Contoh
Contoh 1:
template<typename T> void func(typename T::type* arg); template<typename> void func(...); template<typename T> struct A { typedef T* type; }; func<A<int&>>(...);
Dalam contoh ini, instantiating A
Contoh 2:
template<typename T> void func(typename T::type* arg); template<typename> void func(...); template<typename T> struct A { typedef T* type; }; template<> struct A<char> {}; func<A<char>>(...);
Dalam contoh ini, langkah penyediaan berjaya membuat seketika A
Atas ialah kandungan terperinci Apa yang Mentakrifkan 'Konteks Segera' dalam C 11 SFINAE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!