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
Patricia Arquetteasal
2024-11-19 15:12:03380semak imbas

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>();
};

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

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:
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