使用引用形参返回额外信息

一个函数只能返回一个值,但是呢,有时候函数需要同时返回多个值,引用形参为我们一次返回多个结果提供了有效的途径:

来一个例子,直接上代码:

先说明函数功能:一个函数,返回string对象中的某个字符第一次出现的位置,同时得知该字符总共在string对象中出现的次数,函数中有详细说明。

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

string::size_type FindChar(const string &s, char c, string::size_type &count)
{
	auto ret = s.size();  //字符串总长,来控制循环,同时初始化初始化ret
	count = 0;
	for (decltype(ret) i = 0; i != s.size(); ++i)  //decltype获取ret的类型
	{
		if (s[i] == c)
		{
			if (ret == s.size())  //巧妙使用ret == s.size() 去控制字符C第一次出现,以后都不在统计
				ret = i;
			++count;   //上边if只是第一次进去一次,之后都不在进 以后遇到C都只加count
		}
	}
	return ret;
}

void Test()
{
	string s1("lilililililililililili");
	
	string::size_type Count = 0;;
	auto index = FindChar(s1,'l',Count);
	cout << "第一次出现的位置:" << index << endl;
	cout << "Count = " << Count << endl;
}

int main()
{
	Test();
	return 0;
}
表面看似只完成一个任务:即返回了string对象中某个字符出现的第一个位置,但是由于我们用来统计次数的变量时一个引用形参,在函数外可以直接访问,引用形参不会因为出函数作用域而消失;


来自:C++Primer;


posted @ 2016-04-26 21:37  云端止水  阅读(269)  评论(0编辑  收藏  举报