c++ - 参数传递礼仪 (C++) const 与 value

标签 c++ reference constants parameter-passing

如果一个函数需要对参数做的所有事情就是查看它的值,难道你不应该总是通过常量引用来传递该参数吗?

我的一个同事说小类型没关系,但我不同意。

那么这样做有什么好处吗:

void function(char const& ch){ //<- const ref
    if (ch == 'a'){
        DoSomething(ch);
    }
    return;
}

关于这个:

void function(char ch){ //<- value
    if (ch == 'a'){
        DoSomething(ch);
    }
    return;
}

它们在我看来大小相同:

#include <iostream>
#include <cstdlib>

int main(){

    char ch;
    char& chref = ch;

    std::cout << sizeof(ch) << std::endl; //1
    std::cout << sizeof(chref) << std::endl; //1

    return EXIT_SUCCESS;
}

但我不知道是否总是这样。
我相信我是对的,因为它不会产生任何额外的开销,而且它是 self 记录的。
但是,我想问一下社区,我的推理和假设是否正确?

最佳答案

您的同事是对的。对于小型类型(char、int),当变量不被修改时,通过引用传递是没有意义的。按值传递会更好,因为指针的大小(在按引用传递的情况下使用)大约是小型类型的大小。

此外,按值传递的输入更少,可读性也稍好一些。

关于c++ - 参数传递礼仪 (C++) const 与 value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10256081/

相关文章:

python - 函数修改列表

c++ - "static const int"导致链接错误( undefined reference )

c++ - 将整数传递给函数内的数组(不带指针)

c++ - C++ 中的数组 - 添加数组元素

java - 有没有办法在 Java 中将类作为堆栈变量,或者我在 C++ 思维模式中太多了?

c++ - 在 C++ 中将重写的类方法作为链调用

c++ - Visual Studio 2008 C++。引用 DLL 项目时出现问题

C++ 对象引用/访问

static - 初始化静态const char *数组

c++ - 定义后将值分配给字符串文字数组时出错