[计算机科学经

1 on demand instantiation 10 141 instantiation 10

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: tack 的元素型別 還是 float,而 top()仍然傳回 float 值。 也許你會認為,這麼做會使得型別檢查失效,因為你甚至可以把任意型別的元素賦值給另㆒個 stack。然而事實並非如此。必要的型別檢查會在「來源端 stack」的元素(拷貝)被安插到「目 的端 stack」時進行: elems.push_front(tmp.top()); 如 果 你 將 ㆒ 個 string stack 賦 值 給 ㆒ 個 float stack , 以 ㆖ 述 句 編 譯 時 就 會 發 生 錯 誤 : 「elems.push_front()無法接 tmp.top()的回傳型別」。具體的錯誤訊息因編譯器而異,但 含義類似。 Stack<std::string> stringStack; Stack<float> floatStack; … floatStack = stringStack; // stack of strings // stack of floats // 錯誤:std::string 無法轉型為 float 注意,前述的 template assignment 運算子並不取代 default assignment 運算子。如果你在相同 型別的 stack 之間賦值,編譯器還是會採用 default assignment 運算子。 和先前㆒樣,你可以把內部容器的型別也參數化: // basics/stack6decl.hpp template <typename T, typename CONT = std::deque<T> > class Stack { private: CONT elems; // 元素 public: void push(T const&); // void pop(); // T top() const; // bool empty() const {...
View Full Document

Ask a homework question - tutors are online