c++ 函数可变参数 initializer_list

创建日期: 2024-06-07 17:33 | 作者: 风波 | 浏览次数: 14 | 分类: C++

来源:https://songlee24.github.io/2014/07/22/cpp-changeable-parameter/

1. initializer_list形参

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

#include<initializer_list>  // 头文件

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

例子

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

int main()
{
    cout << func({"This"," ","is"," ","C++"}) << endl;
    return 0;
}

2. 省略符形参

函数可以用省略符形参”…”表示不定参数部分,省略符形参只能出现在形参列表的最后一个位置,它的形式如下:

void foo(parm_list, ...);
// 典型例子
int printf(const char* format, ...)

省略符形参应该仅仅用于C和C++通用的类型,因为大多数类类型的对象在传递给省略符形参时都无法正确拷贝

14 浏览
9 爬虫
0 评论