【C++11 口试】为什么emplace 能秒杀push?深度解剖C++11可变模板参数 . ...

打印 上一主题 下一主题

主题 1804|帖子 1804|积分 5414

<hr> 前言

本篇文章笔者将会对C++11中又一重要问题进行探讨 — 可变参数模版 . 并且会对这部分常考的知识点进行深度讲解 .
<hr> 一、什么是模版 ?

模版
笔者在之前文章介绍过 , 这里简朴回顾一下 .



模板是C++⽀持参数化多态的工具 , 通过一种形式或形态能完成差别的内容/使命 .
在没有模版之前 , 我们想要写一个极其相似但又差别的函数 , 这时我们要写很多个去达到想要的效果 , 但是有了模版 , 就可以只写一个 " 工具 " , 这个工具可以大概帮我们生成对应的内容 .

以上简朴的讲解了一下 , 具体可以看笔者之前详解 ~ .
<hr> 二、可变参数模版

初见可变参数模版



  • 介绍
   1. 可变 , 就是参数类型可变的意思 , 不仅仅范围于参数类型必须相同 .
   2. 还是一个模版
   3. 分为模版参数包和函数参数包 , 即: 0 ~ n 个模版参数或 0 ~ n 个函数参数 .


  • 本质
可变参数本质是模版的模版 . (下方有具体介绍 ~) .


  • 写法
  1. template <class ...Args> //可变类型
  2. void f(Args ...args) // 可变参数
  3. {
  4.    }
复制代码
   是必须有的 , 表现包 . 其中可以为 0 ~ n 个参数或类型
  Args 为名字 , 可以恣意起 .
<hr> 深剖可变参数模版

  1. 这里必须知道一个前提 , 模版的推导都是编译器帮我们完成 , 不需要我们管理
  2. 并且推导是在编译时进行的 .
复制代码
虽然 , 使命都交给了编译器去实现 , 那可变参数模版的原理是什么呢 ?
以下将探讨 .
给出以下代码 :
  1. //万能引用 , 这里面会涉及引用折叠
  2. template <class ...X> // 这里表示有很多个类型
  3. void Print(X&&...args) // 这里表示有很多个参数
  4. {
  5.    }
  6. int main()
  7. {
  8.    
  9.         string st;
  10.         //函数模版不用显示实例化 , 编译器会自动推导 , 编译器会自动生成相应的函数
  11.         Print(); // 0 个参数
  12.         Print(
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表