1

阅读前编辑:对不起..我没有添加换行符,所以看起来很混乱,我无法删除问题,因为我还没有注册,抱歉浪费你们的时间。

我只是第一次使用模板(用于查找两个数字的 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”时,它会阻止 min 工作,并给我奇怪的浮点值?!

我是否以错误的方式使用它?,它应该是别的东西吗?这意味着什么?我了解基础知识,所以简单的解释就可以了。谢谢!

4

2 回答 2

3

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

会发生什么:

  1. 它打印min(1.3, 2.2)的是1.300000
  2. 它打印一个换行符
  3. 它打印add(1, 10),这是11
  4. 它打印add(5.1, 7.34)的是12.440000

由于第 3 步和第 4 步之间没有换行符,因此它直接将数字一个接一个地打印出来,使其看起来像这样:1112.440000.

于 2010-06-29T10:42:57.333 回答
0

一旦您要替换 C 习惯,请查看流:

int main()
{
    std::cout << min(1.3, 2.2) << '\n' 
              << add(1, 10) << '\n' 
              << add(5.1, 7.34) << '\n';
    return 0;
}
于 2010-06-29T10:53:05.820 回答