如何提高C++的效率

发表于:2012-10-22 10:10

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

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

  所以为了提高效率,减少不必要的临时对象的产生、拖延暂时不必要的对象定义、用初始化代替赋值、使用构造函数初始化列表代替在构造函数中赋值等方法都能有效提高程序的运行效率。以下举例说明:

  1、减少临时对象的生成。如以传送对象引用的方式代替传值方式来定义函数的参数,如下例所示,传值方式将导致一个XX临时对象的产生

  效率不高的做法               高效率做法

  void Function( XX xx )       void Function( const XX& xx)
  {                                {
  //函数体                              //函数体
  }                                 }

  2、拖延暂时不必要的对象定义。在C中要将所有的局部变量定义在函数体头部,考虑到C++中对象创建的开销,这不是一个好习惯。如下例,如果大部分情况下bCache为"真",则拖延xx的定义可以大大提高函数的效率。

  效率不高的做法                                          高效率做法

  void Function( bool bCache )                 void Function( bool bCache )
  {                                                      {
  //函数体                                                    //函数体
  XX xx;
  if( bCache )
  if( bCache ) {// do something without xx{                                                                                                    return;
  // do something without xx}
  return;                                                  }
  }
  //对xx进行操作XX xx;
  //对xx进行操作
  …
  return;                                                        return;
  }                                                        }

  3、可能情况下,以初始化代替先定义后赋值。如下例,高效率的做法会比效率不高的做法省去了cache变量的缺省构造函数调用开销。

  效率不高的做法                                                高效率做法

  void Function( const XX& xx )                    oid Function( const XX& xx )(传引用可以省去临时对象构造和析构的过程)
  {                                                {
  XX cache;     (调用了构造函数)                         XX cache = xx;(只调用了复制构造函数)
  cache = xx ;  (调用了赋值函数)
  }                                                 }

  4、在构造函数中使用成员变量的初始化列表代替在构造函数中赋值。如下例,在效率不高的做法中,XX的构造函数会首先调用m_strName的缺省构造函数,再产生一个临时的String object,用空串""初始化临时对象,再以临时对象赋值(assign)给m_strName,然后销毁临时对象。而高效的做法只需要调用一次m_strName的构造函数。

  效率不高的做法                                           高效率做法

  XX::XX()                                            XX::XX() : m_strName( "" )
  {                                                    {
  m_strName = ""; …
  …
  }                                                     }

  类似的例子还很多,如何写出高效的C++程序需要实践和积累,但理解C++的底层运行机制是一个不可缺少的步骤,只要平时多学习和思考,编写高效的C++程序是完全可行的。

33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号