C++中函数模板和模板函数的区别

2024-11-16 02:14:25
推荐回答(5个)
回答1:

模板函数可以进行隐式的数据类型转换,中函数模板不会进行自动类型转换。

一、函数模版和同名普通函数在同一个作用域中,会优先调用哪个函数,具体如下:

1.函数模型在进行调用的时候会进行严格的类型匹配,而普通函数在调用的时候,会进行函数参数类型转换(前提是自动类型转换)。

2.调用函数模版,本质是类型参数化,将要严格的按照类型进行匹配,不会进行自动类型转换

3.调用普通函数,可以进行隐式的数据类型转换(前提是可以进行自动类型转换),这是普通函数和模版函数的本质区别。

二、函数模版可以像普通函数被重载

1.C++编译器优先考虑普通函数:这是因为普通函数已经存在了,而模版函数还需要进一步的判断,如果函数模版产生一个更好的匹配,那么优先选择函数模版。

2.可以通过空模版实参列表的语法限制编译器只调用模版函数(也就是在参数名之后加上<>,隐含了自动类型推断!),C++编译器是如何支持模版机制的。

回答2:

函数模板提供了一类函数的抽象,它提供了任意类型为参数及返回值。函数模板经实例化后生成的具体函数成为模板函数。函数模板代表了一类函数,模板函数表示某以具体函数。

回答3:

类 实例化生成 实例(对象)
函数模板 实例化生成 模板函数

回答4:

2.1 函数模板的定义
不管它们的性质如何,所有的函数模板都具有同样的基本格式:
template<参数说明>
函数头
函数体

例如,下面是一个2参数的模板的声明:
template
T max(T param1 ,T param2)
{
//此处为函数体
}

2.根据上面已定义的模板,编译器将可生成下面的模板函数(都是对的,函数模板的目的就是函数重载):
char * max(char * a, char * b) //模板函数1
{
return (a>b)?a:b;
}

int max(int a, int b) //模板函数2
{
return (a>b)?a:b;
}

double max(double a, double b) //模板函数2
{
return (a>b)?a:b;。

回答5:

2.1 函数模板的定义
不管它们的性质如何,所有的函数模板都具有同样的基本格式:
template<参数说明>
函数头
函数体

例如,下面是一个2参数的模板的声明:
template
T max(T param1 ,T param2)
{
//此处为函数体
}

2.根据上面已定义的模板,编译器将可生成下面的模板函数(都是对的,函数模板的目的就是函数重载):
char * max(char * a, char * b) //模板函数1
{
return (a>b)?a:b;
}

int max(int a, int b) //模板函数2
{
return (a>b)?a:b;
}

double max(double a, double b) //模板函数2
{
return (a>b)?a:b;
}
等等。。。。。。。。。。。。。