对于c++引用概念的疑惑 江湖救急

遥不可及梦 2016-03-06 08:39:37
c++中的引用
在函数体内的引用如
int value = 200;
int & rvalue = value;
一般我们在声明引用时必须对其进行初始化。
我的困惑在用引用作为形参和返回值类型的时候
如 void swap(int & x, int & y);
这样的函数在调用它的时候如
swap(a, b);
我本人的理解是实参传入函数时,引用形参创建并对其进行初始化。(并不是很确定内部的实现求教)
在返回引用的时候
我们平时概念里的返回值,一般返回的是返回值的副本
返回引用的时候 return语句后带的返回值可以不是引用,可以是一般变量
如string & refToElement(vector<string> & vItem, int i)
{
return vItem[i];
}
这里我的理解是返回值创建并对其进行初始化(这里也是本人的理解 不清楚内部)


希望各路大神指点,小弟在这拜过
...全文
128 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
遥不可及梦 2016-03-06
  • 打赏
  • 举报
回复
感谢CharlesSimonyi 你的回答对我有启发,我应该去看看汇编后的代码的
lm_whales 2016-03-06
  • 打赏
  • 举报
回复
函数参数的初始化,在函数调用时,参数传递的时候 并不是在函数 内部 因为每次函数调用的形参,是一个新的数据对象, 所以 函数参数和 函数内部,外部定义的数据对象,是不同的 函数形式参数本质上是声明,不是定义。 函数形参定义对程序员是透明的 函数形参对于调用端。是临时变量,并在调用开始初始化,调用结束 清理(结束生命周期)。
encoderlee 版主 2016-03-06
  • 打赏
  • 举报
回复
在大多数编译器上,引用本质上就是用指针实现的,如下代码

void fun1(int *n)
{
	cout << *n;
}

void fun2(int &n)
{
	cout << n;
}

void main()
{
	int k = 10;
	fun1(&k);
	fun2(k);
}
编译后产生的机器码,fun1和 fun2是完全一模一样的,也就是说在背后的实现原理上,void fun2(int &n)中的n实际上和fun1中的n一样是个指针。 有空可以简单的学习一下汇编,在编译器中写出C/C++代码后,调试运行,转到反汇编,其原理就一目了然了。
遥不可及梦 2016-03-06
  • 打赏
  • 举报
回复
恩恩,说的很对,但是想进步了解一些函数的实现是机制, 例如实参传入函数时,形参是如何创建的 函数返回时,返回值是如何创建的
kikiqk 2016-03-06
  • 打赏
  • 举报
回复
只用记住,引用就是变量的别名,对引用的操作就是对变量的操作,引用并不占内存

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧