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

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

Barbara Streisand
Lepaskan: 2024-11-28 02:10:10
asal
404 orang telah melayarinya

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

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

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

Secara khusus, ungkapan id dalam pengisytihar pembina kini mesti mengambil salah satu daripada yang berikut borang:

  • Dalam pengisytiharan ahli dalam spesifikasi ahli bukan rakan kelas, nama kelas yang disuntik bagi kelas yang disertakan.
  • Dalam pengisytiharan ahli dalam bukan -spesifikasi ahli rakan bagi templat kelas, nama kelas yang menamakan instantiasi semasa kelas yang disertakan templat.

Oleh itu, pengisytiharan pembina yang betul dalam C 20 ialah:

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

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!

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