关闭

编写高质量代码:改善C++程序的150个建议(连载13)

发表于:2012-4-19 09:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:李健    来源:51Testing软件测试网采编

  上述代码要实现的功能极为简单,就是交换两个数据的值。SwapData1()是不能实现所设定的功能的,主要原因是函数内交换的只是实参的副本;而SwapData2()和SwapData3()则正确地实现了作者意图,其汇编代码如下:

  1.      SwapData1(a,b);  
  2. 00F431EC  mov         eax,dword ptr [b]  
  3. 00F431EF  push        eax  
  4. 00F431F0  mov         ecx,dword ptr [a]  
  5. 00F431F3  push        ecx  
  6. 00F431F4  call        SwapData1 (0F4114Fh)  
  7. 00F431F9  add         esp,8  
  8.      SwapData2(&a,&b);  
  9. 00F431FC  lea         eax,[b]  
  10. 00F431FF  push        eax  
  11. 00F43200  lea         ecx,[a]  
  12. 00F43203  push        ecx  
  13. 00F43204  call        SwapData2 (0F411EFh)  
  14. 00F43209  add         esp,8  
  15.      SwapData3(a,b);  
  16. 00F4320C  lea         eax,[b]  
  17. 00F4320F  push        eax  
  18. 00F43210  lea         ecx,[a]  
  19. 00F43213  push        ecx  
  20. 00F43214  call        SwapData3 (0F4101Eh)  
  21. 00F43219  add         esp,8

  正如汇编代码中所示的那样,SwapData2()和SwapData3()其实是一样的,都是对源数据进行操作。但是相较于SwapData2()而言,SwapData3()的实现代码更加简洁清晰。这就是引用在传递函数参数时所具有的巨大优势。

  再来看函数返回值方面,如果其返回值是引用类型,那么就意味着可以对该函数的返回值重新赋值。就像下面代码所示的数组索引函数一样:

  1. template <typename T, int n> 
  2. class Array  
  3. {  
  4.    public:  
  5.        T &operator [](int i)  
  6.          {  
  7.            return a_[i];  
  8.        }  
  9.        // ...  
  10.    private:  
  11.        T a_[n];  
  12. };  
  13.  
  14. Array<int, 10> iArray;  
  15. for(int i=0; i<10; i++)  
  16.          iArray[i] = i*2;

  当然,上述代码可以使用指针重新实现,并且可以保证实现相同的功能,但是相比指针实现版,引用返回值使对数组索引函数的操作在语法上颇为自然,更容易让人接受。

  也许有人认为,指针功能更强大,因为还有指向数组的指针、指向函数的指针,这里我要说的是,引用同样可以。引用在指向数组时还能够保留数组的大小信息,关于这方面的内容,在此就不多讲了。

  请记住:

  从编码实践角度来看,指针和引用并无太多不同。在大多情况下,指针可由索引类型完美代替,并且其实现代码更简洁清晰,更加易于理解。

相关链接:

编写高质量代码:改善C++程序的150个建议(连载1)

编写高质量代码:改善C++程序的150个建议(连载2)

编写高质量代码:改善C++程序的150个建议(连载3)

编写高质量代码:改善C++程序的150个建议(连载4)

编写高质量代码:改善C++程序的150个建议(连载5)

编写高质量代码:改善C++程序的150个建议(连载6)

编写高质量代码:改善C++程序的150个建议(连载7)

编写高质量代码:改善C++程序的150个建议(连载8)

编写高质量代码:改善C++程序的150个建议(连载9)

编写高质量代码:改善C++程序的150个建议(连载10)

编写高质量代码:改善C++程序的150个建议(连载11)

编写高质量代码:改善C++程序的150个建议(连载12)

44/4<1234
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号