Mengalih keluar Senarai Parameter Templat Berlebihan dalam Pembina Templat Kelas dalam C 20
Dalam C 17, ia boleh diterima oleh pembina templat kelas untuk mempunyai senarai parameter templat berlebihan. Contohnya:
template<typename T> struct S { S<T>(); };
Walau bagaimanapun, dalam C 20, ini tidak lagi berlaku. Perubahan terbaru mewajibkan semua pembina untuk templat kelas mesti menggunakan nama kelas yang disuntik, yang menghapuskan lebihan dalam pengisytihar.
Pengubahan ini didokumenkan dalam bahagian keserasian draf C 20:
[diff.cpp17.class] **Affected subclauses**: [class.ctor] and [class.dtor] **Change**: A simple-template-id is no longer valid as the declarator-id of a constructor or destructor. **Rationale**: Remove potentially error-prone option for redundancy. **Effect on original feature**: Valid C++ 2017 code may fail to compile in this International Standard.
Secara khusus, ungkapan id dalam pengisytihar pembina kini mesti mengambil salah satu daripada yang berikut borang:
Oleh itu, pengisytiharan pembina yang betul dalam C 20 ialah:
template<typename T> struct S { S(); };
Atas ialah kandungan terperinci Mengapa Senarai Parameter Templat Berlebihan dalam Pembina Templat Kelas C 20 Kini Dilarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!