Template<class T>
T Abc(T a,T b,T c)
{
return a+b+b*c+(a+b-c)/(a+b)+4;
}
这种形式参数的用法会增加程序的运行开销。例如,我们来考察一下函数被调用以及返回时所涉及的操作。假定a,b和c是传值参数,在函数被调用时,类型T的复制构造函数把相应的实际参数分别复制到形式参数a,b和c之中,以供函数使用;而在函数返回时,类型T的析构函数会被唤醒,以便释放参数a,b和c。
假定数据类型为用户自定义的Matrix,那么它的复制构造函数将负责其所有元素,而析构函数则负责逐个释放每个元素(假定Matrix已经定义了操作符+、*和/)。如果我们用具有1000个元素的Matrix座位实际参数来调用函数Abc,那么复制三个实际参数给a,b和c将需要3000次操作。当函数Abc返回时,其析构函数又需要花费额外的3000次操作来释放a,b和c。
Template<class T>
T Abc(T &a,T &b,T &c)
{
return a+b+b*c+(a+b-c)/(a+b)+4;
}
在上面的代码中,a,b和c是引用参数(reference parameter)。如果用语句Abc(x,y,z)来调用函数Abc,其中x,y,z是相同的数据类型,那么这些实际参数将被分别赋予名称a,b和c,因此,在函数Abc执行期间,x,y和z被用来替换对应的a,b和c。与传值参数的情况不同,在函数被调用时,本程序并没有复制实际参数的值,在函数返回时也没有调用析构函数。
常量引用参数:
Template<class T>
T Abc(const T &a,const T &b,cosnt T &c)
{
return a+b+b*c+(a+b-c)/(a+b)+4;
}
使用关键字const来指明函数不可以修改。
一种更通用的版本:
Template<class Ta,class Tb,class Tc>
Ta Abc(cosnt Ta &a,cosnt Tb &b,cosnt Tc &c)
{
return a+b+b*c+(a+b-c)/(a+b)+4;
}
在这个版本里每个形式参数可能属于不同的数据类型,函数返回值的类型与第一个参数的类型相同。
小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)
GMT+8, 2024-4-30 18:40
Powered by Discuz! X3.4
© 2001-2023 Discuz! Team.