按引用和值传递
Passing by reference and by value
我们有函数
int foo(int x)
{
return x;
}
int bar(int& x)
{
return x;
}
...
foo(5);//ok
bar(5);//error
我不明白,当我们打电话给foo(5)
时会发生什么?内存中刚刚分配了 4 个字节并传输到foo
?还是在分配4个字节后将创建此存储单元的副本并传输到foo
?
函数栏将输入参数作为引用。这种用法的限制是在调用函数时不能将文本作为参数传递。
5 是文字。不能传递文本或表达式作为引用。此外,您的两个函数都返回整数,但您没有捕获它们。
函数 foo 按值接受输入。因此,将创建并处理输入变量的副本。函数内部的变量和外部的调用变量在这里是 2 个不同的变量。
更多信息可以在 http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/
除了另一个答案中给出的信息外,我建议谷歌搜索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: %sn", (y==6?"yes":"no"));
}
运行此程序应该有什么效果?
相关文章:
- 具有默认值的引用获取函数
- 为什么可以将左值传递给"std::async",即使它引用了右值
- 按值捕获引用时出现非常量
- C++带有适用于左值和右值的引用参数的函数
- 按值和引用传递指针之间的区别?
- 当值传递给C++中的运算符重载函数时会发生什么
- 作为赋值(增加引用变量)C++的左操作数所需的左值
- C++模板成员初始化:用右值移动构造,但用左值移动引用
- 这安全吗?右值和引用返回值
- Rcpp 中值和引用参数之间的差异
- put_money是否按值或引用保存其参数
- 如何将非可变参数值传递给 fmt::format?
- 编写两个方法的最佳方法,这些方法在C++中返回同一项的值和引用
- 将 qml 项目值传递给 cpp 后如何与它们进行交互?
- 仅允许从对较长生存期值的引用进行隐式构造
- NDK:将文本字段值传递给 c++ 字符串
- 有没有办法使用基于范围的迭代器来迭代对指针列表值的引用?
- C++,有没有办法制作一个不复制值的引用的构造函数?
- 对r值的引用(r值的地址)
- 如何将值传递给 lambda 函数