2

可能重复:
C++:我如何决定是通过引用还是通过值传递参数?

以下函数由C++ Primer 第 5 版第 211 页和第 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参数?

4

2 回答 2

5

他们为什么不做char c参考const参数?

charconst是如此之小,通常通过值而不是通过引用(或其他方式)传递它更便宜。

于 2013-01-26T10:16:49.290 回答
1

正如@NPE 所说,char与所有内置类型一样,可以像指针或引用一样轻松地按值传递。

从技术上讲,虽然在创建指针或对内置类型的引用以及按值传递方面没有速度差异,但是在取消引用该指针或引用以访问底层值时,性能会受到影响。编译器确实有一些可用的优化策略,涉及引用可能意味着按值传递并不快。但一般来说,您不应该依赖优化器可能会或可能不会做的事情。大多数时候它不会按照你的想法做。

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

于 2013-01-26T10:34:35.580 回答