尽可能传递const引用参数

时间:2013-01-26 10:10:37

标签: c++ parameters const pass-by-reference

  

可能重复:
  C++: How do I decide if to pass params by ref or by value?

以下函数是从C++ Primer, 5th Edition和第214页编写的。此函数将返回字符串中第一次出现给定字符的位置,并告诉该字符串中该字符的出现次数

string::size_type find_char(const string &s, char c, string::size_type &occurs)
{
      // Compares the given character with string 
      // Records the first occurrence of that character
      // The change in &occurs is reflected back to the original variable
}

作者建议在传递参数时使用“避免副本参考”,并对函数不变的参数使用“const参考参数”。 为什么他们没有char c const参考参数?

2 个答案:

答案 0 :(得分:5)

  

为什么他们没有char c const参考参数?

char非常小,通过值而不是引用(const或其他方式)传递它通常会更便宜。

答案 1 :(得分:1)

正如@NPE所述,char与所有内置类型一样,可以像指针或引用一样通过值传递。

从技术上讲,虽然创建指向内置类型的指针或引用并通过值传递没有速度差异,但是在解除引用该指针或引用以访问基础值时会有性能损失。编译器确实有一些可用的优化策略,其中涉及引用可能意味着不能更快地传递值。但一般来说,您不应该依赖优化器可能会或可能不会执行的操作。大部分时间它不会按照你的想法行事。

一般的经验法则是按值传递内置类型,按引用(或指针)传递用户定义的类型。有些情况会迫使你违反这条规则,但是当你遇到它们时你就会知道它们。