Function c++;模板生成时间 大家好,我有一个关于C++中模板的问题。p>

Function c++;模板生成时间 大家好,我有一个关于C++中模板的问题。p>,function,templates,copy,Function,Templates,Copy,我想通过一个例子来解释我的疑问。Lets max()将是我们的模板函数: template <typename Type> Type max(Type tX, Type tY) { return (tX > tY) ? tX : tY; } 在这里,max将被复制3次并替换其参数或其他内容?有人能帮我吗?提前感谢。我的理解是,编译器通常会对每个编译单元的每个数据类型解析一次模板。链接器做了一些聪明的事情来阻止代码膨胀:即,跨所有编译单元的同一函数的多个副本被压缩为1

我想通过一个例子来解释我的疑问。Lets max()将是我们的模板函数:

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

在这里,max将被复制3次并替换其参数或其他内容?有人能帮我吗?提前感谢。

我的理解是,编译器通常会对每个编译单元的每个数据类型解析一次模板。链接器做了一些聪明的事情来阻止代码膨胀:即,跨所有编译单元的同一函数的多个副本被压缩为1。早期的微软C++链接器不需要做任何这样的事情,生成的代码也很大。 在您的示例中,我希望生成两个函数;一个有两个参数,一个有四个参数


啊-我看到您在最后一种情况下编辑了这篇文章,使其具有两个浮点参数,而不是四个整数类型。

因此,根据您的回答,max函数将被复制两次,一个用于int,一个用于float?第二次调用int max将使用函数的第一个副本@BathshebaI认为根本不会生成浮点,因为您的文本都是整数类型。编译器不会给出关于返回类型的详细信息。我可能错了。对不起,这个错误,结果是=max(4.5,12.2)。现在呢@BathshebaNow你会得到两个,一个是双倍的,另一个是int。如果你在不同的编译单元中有相同的东西,你可能会得到总共4个;不过,一个好的链接器会帮你摆脱困境。
int main()
{
int result1,result2;
float result3;

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