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
Barbara Streisandasal
2024-11-28 02:10:10331semak imbas

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

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.

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

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