函数使用引用参数的优势

ZDNet软件频道 时间:2002-11-22 作者:BUILDER.COM |  我要评论()
本文关键词:
C++相对C的一个优势就是它允许开发者使用引用参数以取代对象指针。本文通过例程说明这一点。

C++相对C的一个优势就是它允许开发者使用引用参数以取代对象指针。引用相对于指针的主要优点是易于使用,你可以从下面的代码中看出这一点:

//使用指针
const Employee * pFirst = &( aEmployees[ 0]);
std::cout << pFirst->GetUserName();

//使用引用
const Employee & First = aEmployees[ 0];
std::cout << First.GetUserName(); 

有些时候,你用引用的另一个优势就是初始化引用参数时你不能让它指向一个不可能存在的地方。尽管你可以用指针达到同样的效果,不过你很快就会发现那样做显得比较麻烦:

const Employee * const p = aEmployees[ 0]; 

向函数传递引用参数而不是指针的其它优势如下:

  • 内在性(即在函数内部),你可以用“.”操作符而不是“->”去调用方法或者访问数据;从开发者的角度来看,这样做就少了一个间接层次。
  • 应用只有两种类型:常量型(const)和非常量型。(与此相反,指针一共有四种类型:指向常量数据的常量指针、指向非常量数据的常量指针、指向常量的非常量指针、指向非常量数据的非常量指针。)由于引用只有两种类型,这就降低了你使用指针所遇到的复杂性。
  • 你不可以把引用指向其它地方:这样你就不用担心这一点了。你会希望在许多函数参数上都有这个约束。
  • 不需要检查引用的值是否为NULL。不过,这个有点同时也是缺点,因为传递NULL值的引用参数常常会导致应用程序崩溃(你可以检查指针是否为NULL)。一般情况下,函数应该尽量不要接受NULL值的指针。当你使用标准模板库时(Standard Template Library,STL),NULL几乎没有什么用途。

下面是使用引用类型的函数原型的例子:

void AdjustIllegalCharactersFromFileName( string_type & strFileName);

void ApplicationTrace( const string_type & strMessage);

inline bool case_insensitive_compare(
      const string_type & strFirst,
      const string_type & strSecond);

string_type ComExceptionToString( const _com_error & exc);

void LogException( ostream_type & streamOut, const string_type & strContext);

void DivideUrlInSiteAndLinkWithinSite(
      const string_type & strURL,
      string_type & strSite,
      string_type & strLinkWithinSite);

HRESULT CreateShortcut(
      const string_type & strPathObj,
      const string_type & strPathLinkObj,
      const string_type & strDescObj,
      const string_type & strArgumentsObj);

void FillNewDictionariesCollection( NewDictionariesCollection &
 collNewDictionaries);

long GetWordsSum( long nSumSoFar, WordTranslationsCollection::value_type &
 CurrentWord);

HKEY StringToRootKey( const string_type & strDirectory); 


责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134