c++primer要点-模板与泛型编程

1.当调用一个函数模板时,编译器用函数实参来推断模板实参,并实例化一个特定版本的函数;也可以提供显示模板实参。

2.除了定义类型参数,还可以在模板中定义非类型参数,我们通过一个特定的类型名来指定非类型参数;实例化时,非类型参数被用户提供的或编译器推断的值代替,这些值必须是常量表达式。

3.默认情况下,一个类模板的成员函数只有当程序用到它时才实例化

4.显示实例化可以避免多个文件实例化相同模板的额外开销。当编译器遇到external模板声明时,它不会在本文件生成实例化代码;一个类模板的实例化定义会实例化该模板的所有成员。

5.理解std::move

   template<typename T>

   typename remove_reference<T>::type&& move(T&& t){

        return static_cast<remove_reference<T>::type&&>(t);

   }

   当传递给move的实参是右值时,T的推断类型为实参的类型,remove_reference<T>::type依然是实参的类型,返回的是实参的右值引用

   当实参是左值时,T的推断类型为实参类型的左值引用,remove_reference<T>::type是实参的类型,返回的是实参的右值引用

6.函数匹配时,如果多个模板同样好的匹配,选择更特例化的模板。

7.class...或typename...表示可变参数模板,编译器从函数实参推断参数数目;sizeof...返回实参数,不会对实参求值;我们可以对参数包中的每个元素应用模式。

8.我们可以为模板定义特例化版本。函数模板的特例化版本本质上是一个实例,而非函数名的一个重载版本。因此,特例化不影响函数匹配。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值