Rumah > pembangunan bahagian belakang > C++ > Bolehkah Pembina Templat Kelas C 20 Mengeluarkan Senarai Parameter Templat Berlebihan?

Bolehkah Pembina Templat Kelas C 20 Mengeluarkan Senarai Parameter Templat Berlebihan?

Patricia Arquette
Lepaskan: 2024-11-19 15:12:03
asal
437 orang telah melayarinya

Can C  20 Class Template Constructors Omit Redundant Template Parameter Lists?

Bolehkah Pembina Templat Kelas Mempunyai Senarai Parameter Templat Berlebihan dalam C 20?

Dalam C 17, adalah dibenarkan untuk mengisytiharkan pembina templat kelas dengan senarai parameter templat yang berlebihan, seperti yang ditunjukkan oleh kod berikut:

template<typename T>
struct S {
    S<T>();
};
Salin selepas log masuk

Walau bagaimanapun, dengan kemunculan C 20 dan pelaksanaan perubahan keserasian, kod yang disebutkan di atas kini menimbulkan ralat pada batang GCC (untuk -std=c 20). Batang clang, sebaliknya, menyusun kod tanpa masalah. Ketidakkonsistenan ini menimbulkan persoalan: adakah ini pepijat atau perubahan pemecah yang dimaksudkan yang masih belum dilaksanakan sepenuhnya merentas penyusun?

Jawapannya

Jawapannya terletak pada perubahan halus dalam spesifikasi C 20. Khususnya, bahagian berikut telah disemak:

[class.ctor]

"Pembina diperkenalkan oleh pengisytiharan yang pengisytiharnya ialah pengisytihar fungsi bagi borang:

ptr-declarator ( parameter-declaration-clause ) noexcept-specifier attribute-specifier-seq
Salin selepas log masuk

Di mana ptr-declarator terdiri semata-mata daripada id-expression, optional attribute-specifier-seq, dan pilihan kurungan sekeliling, dan id-expression mempunyai salah satu daripada bentuk berikut:"

Dalam kes pengisytiharan ahli dalam templat kelas, ungkapan id kini mestilah nama kelas yang disuntik bagi entiti yang dilampirkan serta-merta.

Oleh itu, sementara C 17 membenarkan S, C 20 memerlukan S() sebaliknya. Perubahan ini secara berkesan menghapuskan lebihan dan menjajarkan dengan CWG 2237, yang menangani kemungkinan amalan rawan ralat.

Oleh itu, ralat yang dihadapi pada batang GCC dengan -std=c 20 bukanlah pepijat tetapi petunjuk pemecahan perubahan yang diperkenalkan dalam C 20. Penyusun yang belum melaksanakan perubahan ini akan terus menyusun kod lama dengan jayanya, manakala mereka yang telah melaksanakannya akan mematuhi keperluan baharu.

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

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan