我们有功能
int foo(int x)
{
return x;
}
int bar(int& x)
{
return x;
}
...
foo(5);//ok
bar(5);//error
我不明白,当我们打电话给foo(5)
时会发生什么?内存中只分配了4个字节并传输到foo
?或者在分配4个字节后,将创建此存储单元的副本并传输到foo
?
答案 0 :(得分:4)
功能栏将输入参数作为参考。这种用法的限制是在调用函数时不能将文字作为参数传递。
5是字面意思。您不能将文字或表达式作为参考传递。而且,你的函数都返回整数,但你没有捕获它们。
函数foo按值输入。因此,输入变量的副本被制作和处理。函数内部的变量和外部的调用变量是2个不同的变量。
可在http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/
查看更多信息答案 1 :(得分:1)
除了在其他答案中提供的信息之外,我建议使用Google lvalue
和rvalue
来搜索。
此外,想象一下这个有效:
void bar(int& x)
{
x = 6; // modify the referenced value, not some local variable!
}
main() {
int y = 6;
bar(5);
printf ("equal or not: %s\n", (y==6?"yes":"no"));
}
运行此程序会产生什么影响?