作者EdisonX (閉上眼的魚)
看板C_and_CPP
標題[問題] template + 不定參數
時間Wed Apr 4 22:18:02 2012
一份不定參數之 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
→ EdisonX:奇怪,vc2010 跑起來都有問題,請教是否該安裝哪些額外 lib 04/04 23:17
→ EdisonX:或是換 compiler ? 04/04 23:17
→ loveme00835:gcc 4.4 以上 04/04 23:19
→ EdisonX:可跑了, 謝謝 A 大與 L 大 04/04 23:30
→ loveme00835:p大讓我想到字串相加 LOL 04/04 23:43
→ EdisonX:p 大的方法竟然沒想到!感謝提供。 04/05 00:15