C/C++模版

本文详细介绍了C++中的模板函数和类模板的概念及使用方法。包括如何定义模板函数和类模板,以及模板形参的类型和非类型区别,还解释了实参推演的过程和如何为模板形参提供默认值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数模板

template <class T> void swap(T& a, T& b){}

当调用模板函数时类型T就会被“被调用时的实参类型”自动所代替,比如swap(a,b)其中abint 型,这时模板函数swap中的形参T就会被int 所代替。不能在函数调用的参数中指定模板形参的类型,对函数模板的调用使用实参自动推演来进行。

类模板

类模板形参不存在实参推演的问题   必须通过尖括号表明 A<int> m

template<class T> class A{

    public:

        T g(T a,Tb);

        A();

};

template<classT> A<T>::A(){}

template<classT> T A<T>::g(T a,T b){

    return a+b;

}

模板的形参

类型模板形参:类型形参由关见字classtypename后接说明符构成,如template<class T> void h(T a){};其中T就是一个类型形参

非类型模板形参:模板的非类型形参也就是内置类型形参

template<class T, int a> classB{};其中int a就是非类型的模板形参。

如果有int b,这时A<int, b> m;将出错,因为b不是常量。

如果const int b,这时A<int, b> m;就是正确的,因为这时b是常量。

非类型形参一般不应用于函数模板中。

可以为类模板的类型形参提供默认值,但不能为函数模板的类型形参提供默认值。函数模板和类模板都可以为模板的非类型形参提供默认值

template<class T1, class T2=int>class A{};为第二个模板类型形参T2提供int型的默认值。

在类模板的外部定义类中的成员时template 后的形参表应省略默认的形参类型。

比如template<class  T1, classT2=int> class A{public: void h();}

定义方法为template<class T1,class T2> voidA<T1,T2>::h(){}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值