1、rand函数
函数原型:int rand(void);
所需头文件:<cstdlib>
功能和返回值:求出并返回一个伪随机数
2、srand函数
void srand(unsigned int seed);
参数:seed产生随机数的种子
所需头文件:<cstdlib>
功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初化rand()。
3、含有可变参数的函数
两种方法:
如果所有的实参类型相同,可以传递一个名为initializer_list的标准库类型
如果实参的类型不同,可编写可变参数的模板(待学)
initializer_list:是一种标准库类型,用于表示某种特定类型的值得数组,该类型定义再同名得头文件中
int initializerSum(initializer_list<int> il) {
int sum = 0;
for (auto ptr = il.begin(); ptr != il.end(); ptr++) //类似于容器的操作
{
sum += *ptr;
}
return sum;
}
参数传入:int initializer_num = initializerSum({ 20,30,40,50,60 });
使用这种方法需要注意一下几点:
1. initializer_list在C++11中才被引入,这意味着在编译时可能需要加上这个选项 -std=c++11 才能成功编译。上述代码中的auto关键字也是C++11的一部分;
2. 参数必须放在一组‘{}’(大括号)内,编译器通过大括号来将这组参数转化为initializer_list.大括号的的一组实参与initializer_list形参对应;
3. 函数原型initializer_list与普通形参无异。这表明形参列表中可以包含其他类型参数且位置不限,以下函数原型是正确的:
4.元素必须具有相同类型!!!
4、内联函数
内联函数体内不能有循环语句和switch语句
内联函数得定义必须出现在内联函数第一次被调用之前
对内联函数不能进行异常接口声明
5、constexpr函数
在C++11中才被引入constexpr修饰的函数:在其所有参数都是constexpr时一定返回constexpr
函数体中必须有且仅有一条return语句。
例子:
constexpr int get_size() { return 20; }
constexpr int foo = get_size(); //正确:foo是一个常量表达式
6、带默认参数值的函数
可以预先设置默认的参数值,调用时如给出实参,则采用实参值,否则采用预先设置的默认参数值。
有默认参数的形参必须列在形参列表的最右,即默认参数值的右面不能有无默认值的参数;调用时实参与形参的结合次序是从左向右。
如果一个函数有原型声明,且原型声明在定义之前,则默认参数值应在函数原型声明中给出;如果只有函数的定义,或函数定义在前,则默认参数值可以函数定义中给出。
7、重载函数
重载函数的形参必须不同:个数不同或类型不同。
编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一个函数。