【c++ primer读书笔记】【第6章】函数

1.局部静态对象

局部静态对象在对象定义语句时初始化,并且到程序终止才被销毁,在此期间,即使对象所在的函数结束执行也不会对它有影响。

#include<iostream>
#include<string>
using namespace std;

size_t count_calls(){
	static size_t count=0;
	return ++count;
}
int main(){
	for(size_t i=0;i!=10;++i)
		cout<<count_calls()<<" ";  //输出1到10
	cout<<endl;
	
	system("pause");
	return 0;
}

2.参数传递

如果形参是引用类型,它将绑定到对应的实参上,否则,将实参的值拷贝后赋给形参。

3.数组形参

由于不允许拷贝数组,所以我们无法以值传递的方式使用数组参数,因为数组会转换成指针,所以当我们为函数传递一个数组时,实际传递的是指向数组首元素的指针。

void print(const int*);
void print(const int[]);
void print(const int[10]);
上面三个print函数是等价的,每个函数都有一个const int*类型的形参

4.initializer_list形参

initializer_list用于表示某种特定类型的值的数组,定义initializer_list对象时,必须说明列表中所含元素的类型。

initializer_list<string> ls; // initializer_list的元素类型是string

initializer_list对象中的元素永远是常量值。

5.列表初始化返回值

c++11线标准规定,函数可以返回花括号包围的列表。

#include<iostream>
#include<string>
#include<vector>
using namespace std;

vector<string> process(){
	return{ "aaa", "bbb" };
}
int main(){
	vector<string> vec(process());
	for (auto &c : vec)       //输出aaa,bbb,VS2013支持
		cout << c << " ";
	cout << endl;

    system("pause");
	return 0;
}

6.返回数组指针

返回数组指针的函数形式如下:

int (*function(parameter_list))[dimension]
具体例子:
int (*func(int i))[10];

说明:

func(int i)表示调用func函数时需要一个int类型的实参

(* func(int i))表示我们对函数调用的结果执行解引用操作

(* func(int i))[10]表示解引用func的调用将得到一个大小是10的数组

c++11新标准有另一种简化上述func声明的方法,称作尾指返回类型

auto func(int i)-> int(*)[10]; //func接受一个int类型的实参,返回一个指针,该指针指向含有10个整数的数组

7. 函数重载

如果同一作用域内的几个函数名字相同但形参列表不同,我们称为重载函数。

8.内联函数

将函数指定为内联函数,就是将它在每个调用点上”内联地"展开。

如:

inline const string &shortString(const string &s1,const string &s2){
	return s1.size()<=s2.size()?s1:s2;
}
调用
cout<<shortString(s1,s2)<<endl;
将在编译过程中展开成类似下面的形式
cout<<(s1.size()<=s2.size()?s1:s2)<<endl;

9.函数指针

#include<iostream>
#include<string>
#include<vector>
using namespace std;


const string &shortString(const string &s1,const string &s2){
      return s1.size()<=s2.size()?s1:s2;
}
int main(){
    const string&(*pf)(const string &s1,const string &s2); //声明指向shortString函数的指针
    pf=shortString;             //将pf指向shortString函数
    cout<<pf("aa","bbb")<<endl; //调用shortString函数,输出aa

    system("pause");
    return 0;
}

原文地址:https://www.cnblogs.com/ruan875417/p/4495576.html