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