将变量传递给函数

Fak*_*ken 1 c++ optimization function

一个简单的问题:

当我将变量传递给函数时,程序是否会复制该函数中使用的变量?

如果它确实,并且我知道该函数只读取变量并且从不写入它,是否可以将变量传递给函数而不创建该变量的副本,或者我应该将其留给编译器优化来做那对我自动?

GMa*_*ckG 6

是的,复制按值传递的参数.但是,您也可以通过引用传递变量.引用是别名,因此这使参数成为变量的别名,而不是副本.例如:

void foo(int x) {}
void bar(int& x) {}

int i;

foo(i); // copies i, foo works with a copy
bar(i); // aliases i, bar works directly on i
Run Code Online (Sandbox Code Playgroud)

如果将其标记为const,则只有一个只读别名:

void baz(const int&);

baz(i); // aliases i, baz reads-only i
Run Code Online (Sandbox Code Playgroud)

通常,总是通过const-reference传递.当您需要修改别名时,请删除const.最后,当您需要副本时,只需按值传递.*

*作为一个好的经验法则,基本类型(int,char*等)和类型sizeof(T) < sizeof(void*)应该通过值而不是const-reference传递,因为它们的大小足够小,以至于复制将比别名更快.