读高质量C++编程指南

来源:互联网 发布:linux 怎么读 编辑:程序博客网 时间:2024/06/08 14:29

       1.是否应将 void Func(int x) 改写为 void Func(const int &x),以便提
高效率?完全没有必要,因为内部数据类型的参数不存在构造、析构的过程,而复制也
非常快, “值传递”和“引用传递”的效率几乎相当。

      2. 如果函数返回值采用“值传递方式” ,由于函数会把返回值复制到外部临时的存储单
元中,加 const修饰没有任何价值。
 例如不要把函数 int GetInt(void) 写成 const int GetInt(void)。
 同理不要把函数 A GetA(void) 写成 const A GetA(void),其中 A 为用户自定义的
数据类型。
 如果返回值不是内部数据类型,将函数 A GetA(void) 改写为 const A & GetA(void)
的确能提高效率。但此时千万千万要小心,一定要搞清楚函数究竟是想返回一个对象的
“拷贝”还是仅返回“别名”就可以了,否则程序会出错。见 6.2节“返回值的规则”

 

 函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数
中,目的是为了实现链式表达。
例如
 class A
 {…
  A & operate = (const A &other); // 赋值函数
 };
 A a, b, c;    // a, b, c 为 A 的对象
 …
 a = b = c;   // 正常的链式赋值 化境编程界推荐图书系列 -  高质量C++/C 编程指南,v 1.0
2001  Page 84 of 101
 
 (a = b) = c;  // 不正常的链式赋值,但合法
如果将赋值函数的返回值加 const 修饰,那么该返回值的内容不允许被改动。上例
中,语句 a = b = c 仍然正确,但是语句 (a = b) = c 则是非法的。

原创粉丝点击