看板 C_and_CPP 關於我們 聯絡資訊
一份不定參數之 template 原始碼如下 // for pod template<typename Type> Type sum(size_t n, ...) { va_list pa; Type sum = static_cast<Type>(0); va_start(pa, n); while(n--) sum += va_arg(pa, Type); va_end(pa); return sum; } int main() { cout << "correct:" << sum<unsigned> (2, 1, 2) << endl; cout << "error :" << sum<int> (2, 1.0, 2.0) << endl; cout << "correct:" << sum<double> (2, 1.0, 2.0) << endl; cout << "error :" << sum<float> (2, 1.0f, 2.0f) << endl; cin.get(); return 0; } main 前三行都在意料之中,我納悶的是為何第四行出來的結果是錯的? sum<float> (2, 1.0f , 2.0f) 最後會傳回 1.875,不知是否我誤會了什麼? -- If there is no tomorrow, I want to see u last time. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.161 ※ 編輯: EdisonX 來自: 180.177.76.161 (04/04 22:20)
HuangTzHuan:不定參數會 default argument promotion 04/04 22:34
HuangTzHuan:所以 float 會用 double 傳 04/04 22:34
EdisonX:謝謝H大,請教是否有技巧(如特偏化)使sum<float>正常使用? 04/04 22:38
AstralBrain:boost是好物 http://ideone.com/MNUOw 04/04 23:05
loveme00835:QQ 你寫的是 C++ 嗎? http://bit.ly/HkOjvt 04/04 23:10
EdisonX:奇怪,vc2010 跑起來都有問題,請教是否該安裝哪些額外 lib 04/04 23:17
EdisonX:或是換 compiler ? 04/04 23:17
loveme00835:http://codepad.org/WBXcdrmc 04/04 23:18
loveme00835:gcc 4.4 以上 04/04 23:19
EdisonX:可跑了, 謝謝 A 大與 L 大 04/04 23:30
purpose:http://codepad.org/3oPEfPnz 只會寫簡單的,亂浪費記憶體 04/04 23:41
loveme00835:p大讓我想到字串相加 LOL 04/04 23:43
EdisonX:p 大的方法竟然沒想到!感謝提供。 04/05 00:15