首頁  >  文章  >  後端開發  >  為什麼 C 20 類別模板建構函式中的冗餘模板參數清單現在會出現錯誤?

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

DDD
DDD原創
2024-11-19 06:32:02465瀏覽

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

C 20 中類別模板建構子中的冗餘模板參數列表

在C 中,在類別模板中聲明構造函數的語法發生了變化在C 20 中。以前,考慮過以下形式的程式碼格式良好:

template<typename T>
struct S {
    S<T>();
};

儘管 有冗餘,但構造函數聲明中的模板參數,此程式碼編譯成功。然而,在啟用了-std=c 20 標誌的C 20 中,GCC trunk 現在會報告以下代碼的錯誤:

error: expected unqualified-id before ')' token
3 |     S<T>();
^

雖然在GCC10.2 或帶有-std= 的Clang 中不會遇到此錯誤c 20,它源自於C 20 中引入的根本性變化。

根據 C 20 相容性部分,使用作為建構子或析構函數的聲明符 id 的 simple-template-id 不再有效。此舉旨在消除潛在的容易出錯的冗餘。

C 20 的[class.ctor] 部分中的新措詞指定對於類別模板內的成員聲明中的建構函數,應使用注入的類別名稱:

template<typename T>
struct S {
    S();  // Use injected-class-name
};

在此範例中,S 表示內部類別模板的注入類別名稱。因此,冗餘的被刪除。模板參數已從建構函式聲明中刪除。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn