简单的简单模板返回奇数?

时间:2010-06-29 10:40:17

标签: c++ templates malformed

在您阅读之前编辑:抱歉..我没有添加换行符所以它显得混乱,我无法删除这个问题因为我还没有注册,抱歉浪费你的时间

我第一次使用模板(用于查找两个数字的MIN)而不是宏,我喜欢它!但是当我试图修改并制作我自己的模板时,它完全失败了。这是我的代码:

#include <stdio.h>

template <class T> T min(T a, T b) { 
    return a < b ? a : b; 
};

//My attempt now.. because add could be int, float, etc; I wanted a template.
template <class T> T add(T a, T b) {
    return a + b;
};

int main(){

    printf("%f\n", min(1.3, 2.2));  //(Does not appear in console?)
    printf("%d", add(1, 10));       //1.300000 (how is an int show as float? lol)
    printf("%f", add(5.1, 7.34));   //1112.440000
    return 0;
}

现在奇怪的结果出现在评论中.Min工作正常,但是当我将它从比较改为“a + b”时,它会停止工作,并递给我奇怪的浮动值?!

我是以错误的方式使用它吗? ,它应该是别的吗?那是什么意思?我理解基础知识,所以简单的解释就没问题了。谢谢!

2 个答案:

答案 0 :(得分:3)

尝试在其他行之后添加换行符。

这是怎么回事:

  1. 打印min(1.3, 2.2) <{1}} 1.300000
  2. 打印换行
  3. 打印add(1, 10),即11
  4. 打印add(5.1, 7.34) <{1}} 12.440000
  5. 由于第3步和第4步之间没有换行符,因此它会直接打印出数字,使其如下所示:1112.440000

答案 1 :(得分:0)

一旦你要取代C习惯,请查看流:

int main()
{
    std::cout << min(1.3, 2.2) << '\n' 
              << add(1, 10) << '\n' 
              << add(5.1, 7.34) << '\n';
    return 0;
}