当我们处理template类型时,我们无法得知用户实际要用的类型是否为语言的内置类型
:::tips
比如对内置的数据类型,如int,可以通过传值的方式进行传输;
对于class,为了节省开销,通常采用传址的方式进行赋值;
:::
:::info
对于template class中的函数,当不知道类型时,建议是采用const reference的形式进行传输
:::
此外在constructor中,一般是采用member initialization list的形式对参数进行初始化
template <typename valType>
inline BTnode<valType>::
BTnode(const valType &val):_val(val)
{
_cnt=1;
_lchild=_rchild=0;
}
:::tips
不选择在函数体内进行_val=val
原因如下:
若_val的数据类型是一个类
constructor内部对_val的赋值操作可以分解成两个步骤:
- class的默认构造函数会作用在_val上,
- 函数体内会以copy assignment operator将val赋值给_val
但是若是采用member initialization list的方法,则会直接用copy constructor给_val初始化; :::