可能重复:
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
参考参数?
答案 0 :(得分:5)
为什么他们没有
char c
const
参考参数?
char
非常小,通过值而不是引用(const
或其他方式)传递它通常会更便宜。
答案 1 :(得分:1)
正如@NPE所述,char
与所有内置类型一样,可以像指针或引用一样通过值传递。
从技术上讲,虽然创建指向内置类型的指针或引用并通过值传递没有速度差异,但是在解除引用该指针或引用以访问基础值时会有性能损失。编译器确实有一些可用的优化策略,其中涉及引用可能意味着不能更快地传递值。但一般来说,您不应该依赖优化器可能会或可能不会执行的操作。大部分时间它不会按照你的想法行事。
一般的经验法则是按值传递内置类型,按引用(或指针)传递用户定义的类型。有些情况会迫使你违反这条规则,但是当你遇到它们时你就会知道它们。