C++ Primer 答客問 (43) - default value for c …

看板CompBook (電腦用書)作者時間25年前 (2000/03/25 22:48), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
C++ Primer 答客問 (43) - default value for class template parameter 侯捷 jjhou@ccca.nctu.edu.tw 2000.03.25 第一次發表於 清大.楓橋驛站(140.114.87.5).電腦書訊版(Computer/CompBook) 本文將於日後整理於 侯捷網站/侯捷譯作/C++ Primer 中文版/答客問 侯捷網站:www.jjhou.com ---------------------------------------------------------------- 上課時,同學問了一個問題。 p817 提到 class template 的 template parameters 預設值。 給予 class Buffer 兩個宣告式如下: template <class Type, int size = 1024> // (1) class Buffer; template <class Type = string, int size> // (2) class Buffer; 編譯器會讓它通過。同學問,如果 (1)(2) 次序顛倒將如何? 另一個問題是,所有 template parameters 都給予預設值, 可以嗎?如何使用? 關於第一個問題,(1)(2) 次序顛倒可以嗎?想像中一定可以, 結果 BCB4 卻否定了它(真糟糕!)VC6 and G++ OK. 關於第二個問題,所有 template parameters 都給予預設值, 可以嗎?答案是可以。如何使用?答案是用時不必給任何 template argument。 詳見以下範例。 // 本例測試 class template 的 template parameters 是否 // 可以全部擁有 default value。答案:可。 #include <string> using namespace std; // 以下兩個 declarations,先 (1) 後 (2),則 vc6[o], bcb4[o], g++[o] // 以下兩個 declarations,先 (2) 後 (1),則 vc6[o], bcb4[x], g++[o] // bcb4 error msg 如下: // Error E2260 : Default value missing following parameter 'Type' <- 指(2) // Error E2148 : Default argument value redeclared for parameter 'size <- 指(1) template <class Type, int size = 1024> // (1) class Buffer; template <class Type = string, int size> // (2) class Buffer; // 如果保持 (1)(2) 次序,再加 (3),則 vc6[o], bcb4[o], g++[o] // 但若將 (3) 改為 template <class Type, int size = 1024>, // 則 vc6[o], bcb4[x], g++[x] // G++ error msg 如下: // redefinition of default argument for `int const size' <- 指(3) // bcb4 error msg 如下: // Error E2148 : Default argument value edeclared for parameter 'size <- 指(3) template <class Type, int size> // (3) class Buffer { }; int main() { // 在 (1)(2)(3) 的情況下 Buffer<> b; // fine. }  -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ Mail: jjhou@ccca.nctu.edu.tw
文章代碼(AID): #utD6g00 (CompBook)
文章代碼(AID): #utD6g00 (CompBook)