Rumah >pembangunan bahagian belakang >C++ >Mengapa Senarai Parameter Templat Berlebihan dalam Pembina Templat Kelas C 20 Kini Ralat?

Mengapa Senarai Parameter Templat Berlebihan dalam Pembina Templat Kelas C 20 Kini Ralat?

DDD
DDDasal
2024-11-19 06:32:02481semak imbas

Why Are Redundant Template Parameter Lists in C  20 Class Template Constructors Now an Error?

Senarai Parameter Templat Berlebihan dalam Pembina Templat Kelas dalam C 20

Dalam C , sintaks untuk mengisytiharkan pembina dalam templat kelas telah mengalami perubahan dalam C 20. Sebelum ini, kod borang berikut telah dipertimbangkan terbentuk dengan baik:

template<typename T>
struct S {
    S<T>();
};

Walaupun terdapat lebihan parameter templat dalam pengisytiharan pembina, kod ini berjaya disusun. Walau bagaimanapun, dalam C 20 dengan bendera -std=c 20 didayakan, batang GCC kini melaporkan ralat untuk kod ini:

error: expected unqualified-id before ')' token
3 |     S<T>();
^

Walaupun ralat ini tidak ditemui dalam GCC10.2 atau Clang dengan -std= c 20, ia berpunca daripada perubahan asas yang diperkenalkan dalam C 20.

Menurut C 20 bahagian keserasian, penggunaan simple-template-id sebagai declarator-id untuk pembina atau pemusnah tidak lagi sah. Langkah ini bertujuan untuk menghapuskan potensi lebihan yang terdedah kepada ralat.

Perkataan baharu dalam bahagian [class.ctor] C 20 menentukan bahawa bagi pembina dalam pengisytiharan ahli dalam templat kelas, nama kelas yang disuntik hendaklah digunakan sebaliknya :

template<typename T>
struct S {
    S();  // Use injected-class-name
};

Dalam contoh ini, S mewakili nama kelas yang disuntik untuk templat kelas dalam. Akibatnya, lebihan parameter templat dialih keluar daripada pengisytiharan pembina.

Atas ialah kandungan terperinci Mengapa Senarai Parameter Templat Berlebihan dalam Pembina Templat Kelas C 20 Kini Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn