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
Lepaskan: 2024-11-19 06:32:02
asal
505 orang telah melayarinya

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>();
};
Salin selepas log masuk

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>();
^
Salin selepas log masuk

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
};
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan