browser icon
You are using an insecure version of your web browser. Please update your browser!
Using an outdated browser makes your computer unsafe. For a safer, faster, more enjoyable user experience, please update your browser today or try a newer browser.

关于C++的引用

Posted by on 2006 年 01 月 06 日

你可以任意转载本文,但请在转载后的文章中注明作者和原始链接。
媒体约稿请联系 titilima_AT_163.com(把“_AT_”换成“@”)。

hottey小丫的开始学C++了,今天刚一上班就为了引用和丫争论了一阵子。不得不承认自己是前对引用的理解也存在着偏差,于是将今天的理解写下来,以备日后参考并以自警。

《C++ Primer》上说道:“引用(reference)有时候又称为别名(alias),它可以用作对象的另一个名字。通过引用我们可以间接地操作对象,使用方法类似于指针,但是不需要指针的语法。

也就是说,事实上编译器对引用的处理,是对地址的一个绑定。考虑以下代码:

int a = 1, b = 2;
int &c = a;
c = b; // a == 2

其对应的汇编代码为:

mov DWORD PTR _a$[ebp], 1
mov DWORD PTR _b$[ebp], 2
; int &c = a;
lea eax, DWORD PTR _a$[ebp]
mov DWORD PTR _c$[ebp], eax
; c = b;
mov ecx, DWORD PTR _c$[ebp]
mov edx, DWORD PTR _b$[ebp]
mov DWORD PTR [ecx], edx

lea的一句已经说得明明白白了——编译器将a的地址绑定到了c上。

写到这里,一切的技术问题都告一段落。在此我不免又要说几句技术之外的东西:原来当学生的时候,对这些问题是非常有主动性的,但现在呢?时代不同了,身份不同了,希望我对技术的执着还是相同的——当然,也只是希望而已。

订阅本站

5 Comments

  • At 2006.01.07 09:12, QQ396410025 said:

    我对”引用”的理解就是:具有相同地址的变量.

    • At 2006.01.07 09:16, QQ396410025 said:

      我也走了很多弯路…

      • At 2006.01.08 20:44, linda said:

        我也在学C++,感觉好迷茫啊,有空多说点这方面的东东哦!呵呵

        • At 2006.01.09 10:35, said:

          好不容易才打开你的主页阿
          呵呵
          这个比我们那个好多了
          我们那个像玩具
          喜欢你那个以前校园主页留下的照片 哈哈
          多多交流阿:)
          谢谢你的光顾 我也会常来看看

          • At 2006.01.18 11:39, 紫猫 said:

            传说中的小名儿~

            (Required)
            (Required, will not be published)