下面来看几个例子:
(1)一般情况,首先给出一个结论:所有函数参数的类型都“只”是在参数列表中得出来的,例如:
template<class Node, class Mode>
Mode Func(Node a, Mode b){return a}
如果我的函数是这样用的:
int a;float b;
Func(a,b);这时候已经确定Node 为int, Mode为float。
如果我这样定义:
template<class Node, class Mode>
Mode &Func(Node a, Mode b){return a}
那么他会跑到函数内部去check返回值的类型,如果参数不一致,那么他会报错的哦
(2)从上面的例子好像觉得函数内部也能够定一模版中的类型。下面我们来给出一个例子:
template<class Node, class Mode>
Mode Func(Node a, Node b){return a}
编译错误说,不能确定类型Mode
好吧,我们定义一个模版函数:
template<class Node, class Mode>
Mode &Func(Node a, Node b){return a}
不是说这个东西有引用的能到函数内部去check吗?
我们编译发现,还是编译不过去,说明了这样一个结论,参数的决定只能是在函数的参数列表中获取,虽然在返回值如果是&的时候会对返回的参数进行校对而已。