C++ 2.0 新特性 语言特性

只谈新东西

C++ 2.0 新特性 包括语言特性和标准库两个层面,后者以 头文件 形式呈现的。

标准库的东西全部都放在 名称空间 std 中。

 

目录

一、可变参数模板 Variadic template

统一的初始化

explicit 接收多个参数时的构造函数

default 与 delete

模板的模板参数 

noexpect 设置不抛出异常

lambda 函数

使用情形:

 与 Functor 函数对象n的等效


一、可变参数模板 Variadic template

创建可变参数模板,需要理解几个要点:

  1. 模板参数包                      template<typename... Types>
  2. 函数参数包                      void show_list(Types... args)
  3. 展开参数包                      args...
  4. 递归                                 show_list(args...)
#include<iostream>
#include<string>

//definition for 1 parameters -- terminating call
template<typename T>
void show_list(T value) 
{
    std::cout << value << "\n";
};

//definition for more parameters
template<typename T, typename... Args>         $$$$$$$$$$$
void show_list(T value, Args... args)          $$$$$$$$$$$
{
    std::cout<< value << " ";
    show_list(args...);
}

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

模板参数包 Args 基本上是一个类型列表,函数参数包 args 基本上是一个值列表。

如需要知道当前函数参数包内的参数个数,可以使用 sizeof...(args)。

省略号放在函数参数包名的右边,实现将参数包展开:show_list(args...) —> show_list(5,'L',0.5)。

展开与递归的核心理念是:对列表的第一项进行处理,再将余下的内容传递给递归调用,以此类推,直到列表为空。实现这种思想的主要语句如下:

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

每次迭代调用,只处理一个参数,参数列表就会减少一项,余下的类型和值,分别被包装到 Args 和 args 中&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值