原创 【博客大赛】《C++ Primer》学习笔记(十七)函数的可变参数

2016-3-20 18:23 742 9 11 分类: MCU/ 嵌入式 文集: Qt和Cpp
如果函数需要接收的参数个数不定,有两种新的方法可以实现可变的参数。
第一是使用库里定义的类initializer_list,它可以接收相同类型的可变长度的参数。
第二是使用variadic template,这个以后再学。

最原始的方法是使用省略号。
这一节会学习它,但是要注意的是,它仅仅用在和C语言的接口上,这意味能不用它就不用它。

----------------
initializer_list
它和vector一样,是一种template type,目前我们可以不掌握它的原理,而仅仅学会使用它。

initializer_list<T> lst;           //类型为T的空list
initializer_list<T> lst{a,b,c...}  //类型为T的list,元素为a/b/c...,且它们都为const的
lst2(lst)    //复制lst到lst2
lst2 = lst   //使用lst为lst2赋值。复制和复制都不会复制元素,它们会共享元素
lst.size()   //list的元素个数
lst.begin()  //list的起始地址
lst.end()    //list的终止地址

和vector一样,initializer_list必须使用type来进行初始化;
和vector不同,initializer_list的元素总是const的。

举例说明:
void error_msg(initializer_list<string> lstr)
{
    for (auto beg = lstr.begin(); beg != lstr.end(); ++beg)
        cout << *beg << " ";
    cout << endl;
}

我们可以这么调用它:
error_msg({"functionX", expected, actual});
error_msg({"functionX", "okay"});

**** 这里出现了错误:
Symbol 'initializer_list' could not be resolved    hello.cpp
有网页说是增加宏定义: __GXX_EXPERIMENTAL_CXX0X__
但是貌似没有用!

----------------
Ellipsis
省略号仅仅适用于C与C++共同的部分。

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

DiracFatCat 2016-3-22 16:10

谢谢,希望可以不断往前走。

东莞元宝代理Microchip长电二三极管 2016-3-21 08:43

省略号这么大用处?学习了!祝您不断进步!

用户377235 2015-8-10 23:52

貌似老段子了,一两年钱见过

用户1369807 2015-8-5 17:07

有永恒的价值才有意义,否则到头来都是一场空啊!

2005jiangxu_694877046 2015-8-4 08:40

早已经读过这个故事了。我意:每一个人都有自己的活法,身处不同的行业,自然会有不相同的问题,没有可比性,只要自己觉得好,就是好了。

2005jiangxu_694877046 2015-8-4 08:39

早已经读过这个故事了。我意:每一个人都有自己的活法,身处不同的行业,自然会有不相同的问题,没有可比性,只要自己觉得好,就是好了。

用户377235 2015-3-19 11:42

分====生存的意义!!!

leawise_816723039 2015-3-16 11:20

加油站,确实很棒!

4917821_302453205 2015-3-16 09:39

A君的公司应该是福建实达电脑那样的吧。还是C君那样的人既发财,又有人生意义。每个人都想生活过得富裕,但作为工程师,还是要在专业领域里有所建树才是最好的。

用户402158 2014-10-13 14:49

多谢您的支持!~
相关推荐阅读
DiracFatCat 2018-09-05 12:14
【博客大赛】卡尔曼滤波学习笔记(11)从位置估计速度
卡尔曼滤波器,不仅仅是一个低通滤波器,否则也不会持续发展50年。 示例:桑先生需要测试高速列车的性能。测试的目的是判断列车在直线上能否保持80m/s的速度。速度和位置每0.1秒测量一次,但是由于...
DiracFatCat 2018-08-31 19:32
【博客大赛】卡尔曼滤波学习笔记(10)一个简单的示例
《Kalman Filtering: Theory and Practice Using MATLAB》第三章,看不懂,暂时略过。《Kalman Filtering: Theory and Pract...
DiracFatCat 2018-07-19 15:09
对sed命令的练习
sed是流编辑器。它每次处理一个输入,因此很有效率。官方手册:https://www.gnu.org/software/sed/manual/sed.html学习Linux命令,当然要阅读官方手册,所...
DiracFatCat 2018-06-19 15:10
【博客大赛】卡尔曼滤波学习笔记(八)可观测性和可控制性 ...
可观测性是指,在给定模型的情况下,动力学系统的状态是否由它的输入输出唯一确定。可观测性是系统模型的特征。如果传感器矩阵H是可逆的,则本系统可观测,因为有:如果传感器矩阵H某些时候是不可逆的,则本系统仍...
DiracFatCat 2018-06-19 10:56
【博客大赛】卡尔曼滤波学习笔记(七)Z变换
如果我们仅仅对离散线性系统感兴趣,那么就使用下面这个表达式:如果u是常量,那么可以写成:为了简化表达式,我们可以将上面写成:离散线性时不变系统的Φ求解,可以使用Z变换。(* 由于本人已经忘记了Z变换的...
DiracFatCat 2018-06-19 10:54
【博客大赛】卡尔曼滤波学习笔记(六)拉普拉斯变换
对于线性时变/时不变系统,求解Φ(t)有多种方式,拉普拉斯变换是其中一种。(* 由于本人已经忘记了拉普拉斯变换的内容,因此本节待续。)...
EE直播间
更多
我要评论
2
9
关闭 站长推荐上一条 /3 下一条