c++ - ++ 后面关于引用和作为返回值的语法逻辑
问题描述
int f3(int i, int j) {
int& k = i;
++j;
return ++k;
}
int main()
{
int i = 2, j = 4, k;
k = f3(i, j);
cout << "i: " << i << " j: " << j << " k: " << k << endl;
return 0;
}
为什么我得到i = 2
和k = 3
。我的意思肯定是因为我已经设置int& k = i
了,所以 i 和 k 本质上都是同一个变量,因为它们共享相同的内存空间。谁能用简单的英语解释一下为什么这么简单?或者我不明白什么?
解决方案
在这里你设置i
为2
:
int i=2,
在这里你通过i
:
k=f3(i,j);
但是,您传递的副本是i
:
int f3(int i, int j) // you need a "&" in here too if you want to pass the reference
所以在这一行:
int& k = i;
您设置k
为对. i
因此,当您更改它时,实际i
的 frommain
不会更改。
相反,试试这个:
int f3(int &i, int j) { // now you're pssing a reference to i, not a copy thereof
你的输出i
值为3
. 有关引用调用的一个很好的示例,请参见此处。
推荐阅读
- php - PDO $_GET 当用户单击该任务的删除按钮时删除数据库中特定任务的任务ID
- python - Plotly:如何为具有完全不同数据和布局的图形制作一个绘图下拉菜单?
- performance - sqlalchemy 延迟列加载 - 似乎没有任何效率
- html - css 中的 SVG Sprite 声明的背景图像
- javascript - 通过循环从另一个数组在js中创建多维数组
- c++ - 在c ++中查找两个括号之间的字符串,省略里面的其他括号
- javascript - 在纯函数中使用像 Object.keys() 这样的全局函数会被合理地视为杂质吗?
- apache-spark - 如果在低内存上运行,Spark 会比 Hadoop MapReduce 表现更好吗?
- reactjs - 来自不同组件的 react-facebook-pixel
- aws-lambda - AWS Stepfunction 将数据传递给下一个 lambda,而无需所有额外的填充