Fak*_*ken 1 c++ optimization function
一个简单的问题:
当我将变量传递给函数时,程序是否会复制该函数中使用的变量?
如果它确实,并且我知道该函数只读取变量并且从不写入它,是否可以将变量传递给函数而不创建该变量的副本,或者我应该将其留给编译器优化来做那对我自动?
是的,复制按值传递的参数.但是,您也可以通过引用传递变量.引用是别名,因此这使参数成为变量的别名,而不是副本.例如:
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传递,因为它们的大小足够小,以至于复制将比别名更快.