首頁 > 後端開發 > C++ > 主體

為什麼現在禁止 C 20 類別模板建構函式中的冗餘模板參數清單?

Barbara Streisand
發布: 2024-11-28 02:10:10
原創
304 人瀏覽過

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

在C 20 中刪除類別模板建構子中的冗餘模板參數清單

在C 17 中,類別模板建構子可以具有冗餘模板參數清單。例如:

template<typename T>
struct S {
    S<T>();
};
登入後複製

但是,在 C 20 中,情況不再如此。最近的一項變更要求類別範本的所有建構函式都必須使用注入的類別名,這消除了宣告符中的冗餘。

此更改記錄在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.
登入後複製

具體來說,構造函數聲明符中的id 表達式現在必須採用以下之一形式:

  • 在類別的非友元成員規範中的成員宣告中,封閉類別的注入類別名稱。
  • 在非友元成員規範中的成員宣告中-friend 類別模板的成員規範,命名封閉類別模板的目前實例的類別名稱。

因此,正確的建構子宣告C 20 簡單來說就是:

template<typename T>
struct S {
    S();
};
登入後複製

以上是為什麼現在禁止 C 20 類別模板建構函式中的冗餘模板參數清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板