Rumah >pembangunan bahagian belakang >C++ >Apakah yang Membentuk 'Konteks Segera' dalam C 11 SFINAE?
Apakah Sebenarnya "Konteks Segera" dalam C 11 SFINAE?
Konsep "konteks segera" adalah penting dalam Penggantian C 11 Failure Is Not an Error (SFINAE) simpulan bahasa. Menurut Piawaian C 11, hanya jenis dan ungkapan yang tidak sah "dalam konteks terdekat" bagi jenis fungsi dan jenis parameter templatnya boleh mengakibatkan kegagalan potongan.
Pemahaman Awal
Standard memberikan petunjuk terhad dalam nota: "penilaian jenis dan ungkapan yang digantikan boleh mengakibatkan kesan sampingan seperti pengkhususan templat kelas, fungsi pengkhususan templat, penjanaan fungsi tersirat, dll." Kesan sampingan ini tidak dianggap sebagai sebahagian daripada "konteks segera".
Prosedur Keputusan
Untuk menentukan sama ada ralat penggantian berlaku dalam "konteks segera", ikuti ini prosedur:
Konkrit Contoh
template<typename T> void func(typename T::type* arg);
func<A<int&>&>(nullptr); // T::type* is invalid, causing a hard error.
template<typename T> void func(typename T::type* arg);
template<> struct A<char> {};
func<A<char>>(nullptr); // T::type* is not defined, leading to a deduction failure.
Kesimpulan
"Konteks segera" merujuk kepada ungkapan dan jenis yang boleh diselesaikan tanpa memerlukan penjanaan templat atau fungsi tambahan melebihi langkah pra-instansi yang diperlukan. Ralat yang berlaku dalam peringkat pra-instansi ini mengakibatkan ralat kompilasi keras, manakala ralat dalam peringkat penggantian seterusnya menyebabkan kegagalan potongan.
Atas ialah kandungan terperinci Apakah yang Membentuk 'Konteks Segera' dalam C 11 SFINAE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!