当前位置:  编程技术>c/c++/嵌入式

C++可变参数的函数与模板实例分析

    来源: 互联网  发布时间:2014-10-27

    本文导语:  本文实例展示了C++可变参数的函数与模板的实现方法,有助于大家更好的理解可变参数的函数与模板的应用,具体内容如下: 首先,所谓可变参数指的是函数的参数个数可变,参数类型不定的函数。为了编写能处理不同数量实...

本文实例展示了C++可变参数的函数与模板的实现方法,有助于大家更好的理解可变参数的函数与模板的应用,具体内容如下:

首先,所谓可变参数指的是函数的参数个数可变,参数类型不定的函数。为了编写能处理不同数量实参的函数,C++提供了两种主要的方法:如果所有的实参类型相同,可以传递一个名为initializer_list的标准库类型;如果实参的类型不同,我们可以编写可变参数模板。另外,C++还有一种特殊的省略符形参,可以用它传递可变数量的实参,不过这种一般只用于与C函数交互的接口程序。

一、可变参数函数

1、initializer_list形参

如果函数的实参数量未知但是全部实参的类型都相同,我们可以使用initializer_list类型的形参(C++11新标准)。和vector一样,initializer_list也是一种模板类型。下面看看initializer_list提供的一些操作:

#include // 头文件 
initializer_list lst;  // 默认初始化,T类型元素的空列表 
initializer_list lst{a,b,c...}; // 初始化为初始值列表的副本 
lst2(lst)   // 拷贝或赋值不会拷贝列表中的元素;拷贝后, 
lst2 = lst  // 原始列表和副本共享元素 
lst.size()  // 列表中的元素数量 
lst.begin()  // 返回指向lst中首元素的指针 
lst.end()   // 返回指向lst中尾元素下一位置的指针

下面给出一个例子,需要注意的是,含有initializer_list形参的函数也可以同时拥有其他形参。另外,如果想给initializer_list形参传递一个实参的序列,必须把序列放在一对花括号内:

string func(initializer_list li) 
{ 
  string str(""); 
  for(auto beg=li.begin(); beg!=li.end(); ++beg) 
    str += *beg; 
  return str; 
} 
 
int main() 
{ 
  cout 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python函数默认参数和字典参数及可变参数(带星号参数)
  • 如何定义一个可变参数的自定义函数
  • C语言可变参数函数详解示例
  • java 方法能不能让像c中那样:行参是可变的(指的是个数和类型)
  • java可变参数使用示例
  • shell中的可变参数问题
  • Java不可变List类型 JavaTuples
  • java虚拟机的内存大小是否可变
  • 怎么把一个可变长的字符串的最后一位付给另外一个变量?
  • nohup 日志能否 可变
  • 关于可变长数组VLA的一点疑问
  • c++11可变参数使用示例
  • 请问如何在jsp中include一个可变的变量文件名,谢谢!
  • c# 方法可变数量的参数
  • 深入Java不可变类型的详解
  • 在可变式分区分配方案中,只需要进行一次比较就可以判定系统是能否满足作业对主存空间要求的是( )。
  • c# params参数用法 可变数目参数params实例
  • "Integer对象是不可变的"-----关于final和封装器的问题,望高手指点!
  • C/C++宏定义的可变参数详细解析
  • c语言可变参数实现示例
  • 用c语言根据可变参数合成字符串的实现代码
  • 不可变数据集合 Immutable.js
  • 用C#的params关键字实现方法形参个数可变示例




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3