1

大家好,我有一个关于 C++ 模板的问题。

我想通过一个例子来解释我想知道的。让 max() 成为我们的模板函数:

template <typename Type> 
Type max(Type tX, Type tY)
{
    return (tX > tY) ? tX : tY;
}

现在,当我在 main 中调用这个 max 时,编译器会为每个调用生成函数

并用实际类型替换模板类型?

我是说;

int main()
{
int result1,result2;
float result3;

result1=max(3,5);
result2=max(10,12);
result3=max(4.5,12.2);
return 0;
}

在这里 max 将被复制 3 次并替换其参数或其他内容?有没有人可以帮助我?提前致谢。

4

1 回答 1

0

我的理解是,编译器通常为每个编译单元的每个数据类型解析一次模板。并且链接器做了一些巧妙的事情来阻止代码膨胀:即将所有编译单元中相同函数的多个副本压缩为 1。早期的 Microsoft C++ 链接器不费心做任何此类事情,并且生成的代码很大。

在您的示例中,我希望生成两个函数;一个有两个参数,一个有四个。

啊-我看到您已将帖子编辑为在最后一种情况下具有两个浮点参数,而不是四个整数类型。

于 2013-05-29T11:47:38.250 回答