c++函数模板怎么写 (c++语言中函数模板定义的关键字)

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

然后我们再来看一下普通函数和函数模板的调用规则

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

可以看到有4个,

1.如果函数模板和普通函数都可以地调用的时候,优先调用普通函数

2.可以通过空模板参数列表,强制调用,函数模板

3.函数模板可以发生函数重载

4.如果函数模板可以产生更好的匹配,就优先调用函数模板

有上面4个调用的规则.

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

我们用例子去看一下

我们去写一个普通的函数myPrint(int a,intb),

然后我们再去写一个模板template

然后我们再去写一个myPrint函数,这里使用模板来实现的这个,函数模板

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

然后我们写个测试方法test01,去调用一下

myPrint,因为我们现在有两个myPrint函数,一个是普通函数,

一个是函数模板,这个时候,他会调用哪个函数呢?

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

可以看到调用的是普通函数.

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

这个就是调用规则的第一点,

如果函数模板和普通函数都可以调用,会优先调用普通函数

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

然后我们再去看,首先我们,注释掉普通函数的实现

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

可以看到立*报马**错了对吧,因为他去调用普通函数,但是现在普通函数,没有主体了,只有一个

声明了.

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

然后我们再去看看,现在我们普通函数调用不了,我们只能调用模板函数了,

这个时候,我们可以不给模板函数传任何参数,我们直接,写个<> 空的参数类型

然后传入参数,a,b就可以了.

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

这个时候可以看到,就调用到了,函数模板的了,强制调用的

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

然后我们再去把,上面普通函数的,函数体的注释给打开.

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

然后我们执行,可以看到,依然是调用的函数模板对吧.

这说明我们是强制调用的,函数模板对吧,使用<>空的参数类型实现的.

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

然后我们再去看,实际上,函数模板,也是可以重载的,可以看到

上面,我又,写了一个myPrint,给了3个参数,这3个参数,就是上面两个

参数的myPrint函数模板的,重载函数模板.

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

可以看到执行也不报错对吧.

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

然后我们去调用一下看看,可以看到都可以调用没报错

我们暂时把上面myPrint(a,b),注释掉

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

然后执行去看看,可以看到

显示的是调用重载模板对吧,表示重载的函数模板被调用了.

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

然后我们注释掉,上面的测试代码

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

然后我们再去写两个char类型的数据,去测试一下

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

可以看到上面现在有两个myPrint可以给我们调用,一个是普通函数,参数类型的int,

一个是函数模板,参数类型不确定是T

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

然后我们去执行

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

可以看到上面调用的是函数模板对吧,这说明什么?

当,有两个myPrint函数,都可以调用的时候,

如果普通函数的调用,可以看到普通函数的参数是int,而我们声明的变量类型是char,

如果调用普通函数,c++编译器,需要做一层隐式转换,这个太麻烦了.

所以c++编译器就会直接调用函数模板,以自动推导方式来调用

c++常用函数大全,c++函数的定义与调用

c++常用函数大全,c++函数的定义与调用

上面是总结,可以看到上面就说了c++中,函数模板和普通函数的调用规则.