首頁 > 後端開發 > C++ > C 模板中何時需要「typename」關鍵字?

C 模板中何時需要「typename」關鍵字?

Barbara Streisand
發布: 2024-12-21 01:03:10
原創
582 人瀏覽過

When is the

什麼時候需要「typename」關鍵字? [重複]

考慮以下程式碼:

template<class K>
class C {
    struct P {};
    vector<P> vec;
    void f();
};

template<class K>
void C<K>::f() {
    typename vector<P>::iterator p = vec.begin();
}
登入後複製

為什麼在此範例中需要「typename」關鍵字?

答案:

每當您引用巢狀名稱時,「typename」關鍵字都是必需的範本類別或函數,其中巢狀名稱的類型在編譯時未知。這稱為“從屬名稱”。

在 C 中,實體分為三類:值、型別和範本。其中每一個都可以有名稱,但名稱本身並不能表示該實體屬於哪個類別。因此,編譯器必須從上下文推斷實體類別。

當編譯器無法推斷類別時,您必須使用適當的關鍵字明確指定它:

  • " typename": 指定模板中的類型
  • "template":指定範本在範本內
  • 「值」:指定範本內的值(範例中未明確顯示)

在提供的程式碼中,嵌套名稱「向量

」是模板類別中的一種類型。但是,編譯器無法推斷這一點,因為類型參數“K”在編譯時未知。因此,需要“typename”關鍵字來明確指定“vector

必須指定「typename」的其他情況包括:

  • 在類別中宣告範本別名時
  • 定義建構函數或析構函式時對於巢狀型別
  • 存取巢狀的成員函式時type
  • 使用型別作為範本參數時

以上是C 模板中何時需要「typename」關鍵字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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