C++ Primer Plus 学习笔记 第十八章 可变参数

嗯。。。这不就是python的**kwargs么

有几个概念要懂

模板参数包

函数参数包

展开参数包

递归

 

先说模板参数包和函数参数包:

template<typename T>

void show_list(T value){};

这是常规的模板函数

那如果加上参数包

template<typename ... Args> (模板参数包)
    void show_list(Args ... args)(函数参数包)
    {};

这样可以传递进多个元素,而且类型还可以不一样

展开参数包:

         \\模板参数包    
template<typename ... Args>
                    \\ 函数参数包
    void show_list(Args ... args)
    {
        \\ 这是展开参数包 然后无限递归  = =
        show_list(args...)
    };

如何解决无限递归的问题

template<typename T, typename ... Args>
    void show_list(T value, Args ... args)
    {
        show_list(args...)
    };

这样每次递归调用的时候都会少掉1个参数 直到无参为止

程序示例

#include <iostream>
#include <string>
// 没有任何参数时调用该函数。
void show_list3(){}

template<typename T, typename... Args>
  void show_list3(T value, Args... args)
  {
    std::cout << value << ", " << std::endl;
    show_list3(args...);
  }

  int main()
  {
    int n = 14;
    double x = 2.71828;
    std::string mr = "Mr, String objects!";
    show_list3(n, x);
    show_list3(x*x, '!', 7, mr);
    return 0;
  }

运行结果

程序改进:

输出后换行和使用按引用传递

程序示例

#include <iostream>
#include <string>
void show_list3(){}

// 增加最后的换行
template<typename T>
  void show_list(const T& value)
  {
    std::cout << value << '\n';
  }

//按引用传递数据
template<typename T, typename... Args>
  void show_list3(const T& value, const Args&... args)
  {
    std::cout << value << ", ";
    show_list3(args...);
  }

  int main()
  {
    int n = 14;
    double x = 2.71828;
    std::string mr = "Mr, String objects!";
    show_list3(n, x);
    show_list3(x*x, '!', 7, mr);
    return 0;
  }

 

十八章就这样了。后面的两节就是大概说了下C++的其他东西和boost(加起来不到两张纸好像 反正没啥内容)

 

总结

完结 娃哈哈哈啊我要开始撸QT了瓦哈啊哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@凌晨三点半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值