使用引用形参返回额外信息
一个函数只能返回一个值,但是呢,有时候函数需要同时返回多个值,引用形参为我们一次返回多个结果提供了有效的途径:
来一个例子,直接上代码:
先说明函数功能:一个函数,返回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;