在編譯模板的時候,編譯器會分兩個階段去解析遇到的名稱,第乙個階段解析不依賴於模板引數的名稱,第二個階段解析依賴於模板引數的名稱,下面舉個簡單的例子來說明這一點:
templateclass x ;
typedef double e;
templateclass y : public x
};
這個例子中定義了兩個類模板,其中y派生於x,在x中我們給int取了個別名e,接著在全域性作用域中給double也取了個別名e,在y中有乙個函式f(),它的返回值型別為e,那麼這個e到底是double呢,還是int?結果是double,因為f()不依賴與模板引數t,所以它在第一階段就會被解析,而它的基類x<.t>在第二階段才會被解析,所以解析f()的時候只能看到全域性作用域裡的typedef double e。如果大家心裡有疑問,我們可以看看非模板類的情況:
class x ;
typedef double e;
class y : public x
};int main()
};int main()
};int main(){
yy;cout<
C 的名稱查詢順序
大致順序是 編譯器執行以上步驟的時候是使用貪心匹配,只要找到乙個符合當前檢查內容的就會停止查 找所以任何一層都有可能發生錯誤的掩蓋情況 例1void f int class y y 這裡的f 2 在1.2 這裡找到了符號f,就不會向上到1.5 查詢到真正的f int 了 例2void g int n...
C Templates 模板中的名稱
名稱的分類 識別符號 運算子id 型別轉換函式id 模板id 非受限id 受限id 受限名稱 非受限名稱 依賴性名稱 非依賴性名稱 如果乙個名稱使用域解析運算子或者成員訪問運算子來顯式表明它所屬的作用域,就稱該名稱為受限名稱。如果乙個名稱依賴於模板引數,就稱為依賴性名稱。名稱查詢 受限名稱的名稱查詢...
C 學習處理模板化基類裡的名稱
20180330 c 學習處理模板化基類裡的名稱 假設我們需要撰寫乙個程式,它能夠傳送資訊到若干不同的公司去,資訊要不譯成密碼,要不就是未經加工的文字,若編譯期間我們有足夠資訊來決定哪乙個資訊傳至哪乙個公司,就可以採用基於模板 template 的解法 class companya class co...