Rumah >pembangunan bahagian belakang >C++ >Apakah 'Konteks Segera' dalam C 11 SFINAE dan Bagaimana Ia Mempengaruhi Kegagalan Penggantian?
Memahami "Konteks Segera" dalam C 11 SFINAE
Piawaian C 11 menentukan syarat apabila kegagalan penggantian mengakibatkan penyusunan keras ralat atau ralat lembut yang hanya membuang templat daripada calon resolusi beban lampau. Satu konsep utama dalam penentuan ini ialah "konteks segera."
Takrifan "Konteks Segera"
Istilah "konteks segera" disebut secara ringkas dalam Standard, tetapi takrifan tepatnya tidak diberikan secara eksplisit. Walau bagaimanapun, ia sering dijumpai bersama dengan teks berikut:
Note: The evaluation of the substituted types and expressions can result in side effects such as instantiation of template specializations, generation of implicitly-defined functions, etc. Such side effects are not in the “immediate context” and can result in the program being ill-formed.
Nota ini menunjukkan bahawa sebarang kesan sampingan yang berlaku semasa proses penggantian, seperti instantiasi templat atau definisi fungsi tersirat, tidak dianggap sebagai sebahagian daripada konteks segera.
Menentukan Ralat Penggantian Serta-merta Konteks
Untuk menentukan sama ada ralat penggantian berlaku dalam konteks segera, pertimbangkan langkah berikut:
Contoh
Pertimbangkan templat berikut dan undur fungsi:
template<typename T> void func(typename T::type* arg); template<> void func(...);
Kesimpulan
Dengan memahami konsep konteks segera, anda boleh mengenal pasti dengan lebih baik apabila ralat penggantian akan mengakibatkan ralat kompilasi keras atau kegagalan potongan lembut, membolehkan penggunaan SFINAE secara berkesan dalam C 11.
Atas ialah kandungan terperinci Apakah 'Konteks Segera' dalam C 11 SFINAE dan Bagaimana Ia Mempengaruhi Kegagalan Penggantian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!