C++的引用类型小讨论

C++的引用类型小讨论

一、C++引用的意义?

  1. 在函数中对一个参数进行修改:

    1
    2
    3
    4
    5
    6
    7
    8
    void incr(int& rr) { rr++; }
    //This function increases the "parameter" given by 1.
    //Treat '&' as "get rr's pointer".
    void g()
    {
    double ss = 1;
    incr(ss);
    }
  2. 加速。(针对常量引用)

    我们不妨考虑一下大的对象的存在和一般函数的“形参”思维。由于有“形参”的存在,函数在传入参数时相当于复制了一个temp,接着处理temp,最后把result回传(保证实参在函数过程中不被改变)。那么当对象较大时,这一temp的初始化过程会占用一定的时间,降低效率。此时采用例如 “const int& number” 的形式,就可以立刻传入一个对象并且该对象不能被改变,等同于传了参数进来。

    当然,int类型的参数这么传并不能节约多少时间,此处只是扔一个小栗子。

二、for与引用

先看这个函数:

1
2
3
4
string s("Hello World!");
for (auto &c:s)
c = toupper(c);//转换大写形式
cout << s << endl;

可能有人会问:遍历字符串s的时候,每个字符都要以引用形式绑定到c,但引用不是只可以绑定一次么?

我们可以将它理解成:

1
2
3
4
for(auto iter = s.begin();iter != s.end();++iter)
{
auto & c = *iter;
}

引用可以且仅可以绑定一次,

但在这种for相关的特殊引用中,每次循环,c引用都会被消解,生命周期结束。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!