首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

c++引用作为返回值

引用c++里面可以说是一把利器,引用好的话可以写出非常精妙程序。 引用本质: 引用C++内部实现是一个常指针。...使用角度,引用会让人误会其只是一个别名,没有自己存储空间。这是C++为了实用性而做出细节隐藏。...:t = temp; a = t; 返回函数引用 返回引用实际返回是一个指向返回值隐式指针,在内存不会产生副本,是直接将temp拷贝给a,这样就避免产生临时变量,相比返回普通类型执行效率更高...千万别返回局部对象引用,当函数执行完局部对象也就被销毁,栈空间被释放,从而返回地址已经不存在,导致后面执行出错。 2)....返回函数引用去初始化一个新引用 这个和前面一样,都是不会产生副本,但是现在是用返回值去初始化一个引用声明c,也就是说这时候变成了变量temp别名,在c生命周期内temp是一直有效,这样做完全可以

62910
您找到你想要的搜索结果了吗?
是的
没有找到

C++C++ 引用详解 ⑤ ( 函数 “ 引用类型返回值 “ 当左值被赋值 )

函数返回值 能作为 左值 , 是很重要概念 , 这是实现 " 链式编程 " 基础 ; 一、函数返回值不能是 " 局部变量 " 引用或指针 1、函数返回值常用用法 在 C++ 语言中 , 函数返回值...如果 是 外部通过 函数参数 传入到函数 指针 / 引用 , 没有必要返回 , 外部已经有了 , 你再返回一次意义不大 ; 2、分析函数 " 普通返回值 " 做左值情况 函数普通返回值 不能做左值...; 如果函数返回值是一个普通类型 , 那么返回是 指定变量 副本值 ; 下面的 fun 函数 , 返回是 静态变量 a 值 , 注意 : 这里返回只是 a 值 , 与静态变量无关 ; 是将...函数 , 返回 局部变量 创建 静态变量 a 引用 , 相当于 将 静态变量 内存地址返回回去了 , 该 静态变量 内存地址 直到程序结束之前 都是有效 , 因此该引用返回值 可以正常使用...a = 20; return a; } 在下面的代码 , 先获取 fun2 函数 引用返回值 , 将其打印出来 , 值为 10 ; 然后 再次调用 fun2 函数 , 直接将其作为左值 ,

27030

C++引用本质

引用C++引入重要机制,它使原来在C必须用指针实现功能有了另一种实现选择,在书写形式上更为简洁。那么引用本质是什么,它与指针又有什么关系呢?...---- 2.高级语言层面引用与指针常量关系 (1)在内存中都是占用4个字节(32bits系统存储空间,存放都是被引用对象地址,都必须在定义同时进行初始化。...(3)将引用变量r理解成指针,间接获取r地址并修改r值,使r指向变量j。引用角度理解就是将引用r与j绑定。对r赋值,结果显示j值被修改。 以上代码是较为诡异,实际编程绝不提倡大家模仿。...利用以上程序可以看出“引用“本身的确是一个变量,它存放被引用对象地址。并且,利用特殊手段能够找到这个引用变量地址并修改其自身在内存值,从而实现与其他对象绑定。...因此,研究此程序目的是为了对引用变量底层实现机制有所了解。在实际使用,还是要遵循C++语言对引用制定规范。

71720

C++引用详解

故:对引用地址,就是对目标变量求地址。&ra与&a相等。 (6)不能建立数组引用。因为数组是一个由若干个元素所组成集合,所以无法建立一个数组别名。   ...但是现在(C++)又增加了一种同样有效率选择(在某些特殊情况下又是必须选择),就是引用。   ...& (2)用引用返回一个函数值最大好处是,在内存不产生被返回值副本。   ...float c=fn2(10.0); //第3种情况,系统不生成返回值副本 21 //可以被调函数返回一个全局变量引用 22 float &d=fn2(10.0); //第4种情况...,系统不生成返回值副本 23 //可以被调函数返回一个全局变量引用 24 cout<<a<<c<<d; 25 }   引用作为返回值,必须遵守以下规则: (1)不能返回局部变量引用

1.3K50

C++引用

二、引用返回值 1.值和引用作为返回值类型性能比较 例子: #include struct A{ int a[10000]; }; A a; // 值返回 A TestFunc1...4.分两种情况讨论是否可以用引用返回值: 1.一般情况下(不使用引用返回值)函数返回值是通过创建一个临时变量,对要返回值进行拷贝,再返回临时变量。...2.用引用返回值,一旦函数调用结束,如果,函数返回值是在函数调用过程创建在栈上空间,那么该空间将被销毁(空间归还给操作系统了,空间里内容不再被保护),此时去返回该空间里值就是非法访问,这种行为是未定义...因此,对上面例子两种情况分析如下: ①返回值是定义在静态区,则使用引用返回是无影响(因为此时引用返回值是在静态区,所以不会有影响) ②返回值不是定义在静态区,则使用引用返回是有影响(因为此时调用函数结束...本文作者目前也是正在学习C++相关知识,如果文章内容有错误或者不严谨部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。

16320

C++入门到精通——引用(&)

C++引用 前言 C++引用是别名,它为已存在对象提供了另一个名称。一旦引用被初始化指向一个对象,它就不能再指向其他对象。引用必须在声明时初始化,并且必须初始化为有效对象或字面量。...在C++引用是一个别名,用于已经存在变量或对象。引用提供了对变量间接访问,通过引用,可以通过不同名称来访问同一变量。...保证值不变 C++引用是指使用const关键字修饰引用,即被引用对象不能被修改。...: 引用和指针不同点 引用概念上定义一个变量别名,指针存储一个变量地址。...含义不同:引用结果为引用类型大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节) 引用自加即引用实体增加1,指针自加即指针向后偏移一个类型大小 有多级指针,但是没有多级引用

8310

C++C++ 引用详解 ③ ( 函数返回值不能是 “ 局部变量 “ 引用或指针 | 函数内 “ 局部变量 “ 引用或指针做函数返回值无意义 )

2、函数返回值特点 函数 返回值 几乎很少是 引用 或 指针 ; 函数 计算结果 经常是借用 参数 地址 / 引用 进行返回 , 函数 返回值 一般返回一个 int 类型值 , 如果...引用 和 指针 作为 传入 参数 ; 在 main 函数 , 调用 函数 , 创建一个 变量 , 将 变量 地址 / 引用 传入 函数 , 在函数通过 指针符号 或者 引用 , 直接修改传入实参..., 也就是 修改 地址 / 引用 指向 内存数据 , 该操作可以修改 外部 main 函数变量值 ; 如果 想要 在 函数 , 返回一个 地址 / 引用 作为返回值 , 这个 地址 /...引用 是 谁 , 如果 是 在 函数内部 栈内存 创建 变量 地址 / 引用 , 那么 函数执行结束 , 返回时 , 该 栈内存直接被回收了 , 地址 / 引用 指向内存空间可能就是随机值 ;...如果 是 外部 main 函数 变量 地址 / 引用 , 那么 肯定是 参数 传入 , 那么这个 地址 / 引用 就不需要返回 , 函数内部修改 , 直接体现在了外部变量 ; 因此

32220

C++引用处理

目录 1.引用基本用法 1.1 引用实质 1.2 引用用法  2.函数引用 3.引用本质 4.指针引用 5.常量引用 ---- 1.引用基本用法 引用C++对C重要扩充。...在c/c++,指针用法基本一致。但是C++增加了另一种给函数传递地址途径,这就是引用传递,也存在去其他语言,并不会是C++独有。...&在等号左边是引用,在等号右边是取地址  代码 #include using namespace std; void test01() { int a = 10; int...+可以也使用引用很好解决这个问题 void swap_ref(int &x, int &y)// int &x =a, int &y =b { int tmp = x; x = y;...如果想改变p内容,函数传递时候按照指针方法传地址,如下:  get_mem(&p); 如果你想用引用方法直接传就行 void test03() {   int *p = NULL;

42830

C++入门】—— C++入门 ()_引用

前言:了解了什么是C++,我们进入了C++入门知识命名空间,现在我们接着来讲剩下C++入门知识讲解。...半缺省参数必须右往左依次来给出,不能间隔着给!...func函数地址编译器无法知道调用哪个函数,因此C语言不支持函数重载 在C++汇编,我们发现这两个函数 C++函数参数类型,数量,顺序不同在符号表名字就不一样,就可以区分两个函数,...: 引用和指针不同点: 引用概念上定义一个变量别名,指针存储一个变量地址。...总结 本小结我们了解C++入门三大知识,缺省参数,函数重载,以及引用,在后面C++学习这些都极为重要,尤其是引用。到这里我们已经入门一大半了,还有最后一点入门知识,我们期待下回分解!

8910

C++C++ 引用详解 ⑦ ( 指针引用 )

*arr = malloc(size * sizeof(int)); } 修改指针值 : 借助二级指针 , 可以在函数修改指针值 , 即改变它所指向地址 ; 如果直接传递 一级指针...; 在 C++ 语言 , 使用 引用 时 , C++ 编译器 会自动将 引用 翻译为 一级指针 使用 , 自动 在 一级指针 变量 旁边加上 取地址符号 & 和 取值符号 * ; 指针引用 就相当于..., 需要满足如下三个条件 : 函数定义 指针类型 形参 , 调用函数时 修改函数外 实参 ; 将 实参 取地址 , 传递给 函数 ; 在函数 , 通过指针修改 实参值 , 以达到修改外部变量效果...还原为 C 语言中地址 传入函数 , 在函数内部使用指针访问实参 ; 3、代码示例 - 指针引用 该 函数 参数 是 一级指针引用 , 使用该参数时 可以当做 一级指针使用 , 其效果...等同于 二级指针 ; 其效果等同于上一篇博客 【C++C++ 引用详解 ⑥ ( 普通变量 / 一级指针 / 二级指针 做函数参数作用 ) int getStudent(Student** stu

29820

c和c++区别 (三)const&(引用)和const*(地址)在函数应用

一、用普通引用接收返回值 int GetInt(){ int value=10; return value;//返回值通过eax寄存器带回 } int main(){ int...&a=GetInt();//错误 //引用初始化值要能取地址,寄存器没有地址 修改为:const int& a=GetInt(); return 0; } 二、返回局部变量地址...//不能返回局部变量地址引用 int* GetIntPtr(){ int value=10; //const int value=10;是数据,在.data段,这种情况可以返回地址...//修改为常引用:int* const&p=GetIntPtr(); return 0; } 四、返回局部变量引用 //不能返回局部变量引用 int& GetIntRef(){...int a=GetIntRef(); *eax->p } 五、返回指针地址、返回指针引用 int** GetIntPtrPtr(){ static int data=10;

1.1K10

C++引用

C++引用学习: 通常引用第一个作用,人们会想到引用变量别名;(可以说是直接操作这个变量); 引用声明: Type + & + name(可以认为是一个常指针) 注意:(1)&是起标识符作用...;    (2)声明引用时,必须先将其进行初始化; (3)不能建立数组引用,因为数组是因为由若干个元素组成,所以无法建立一个数组别名; 引用应用: (引用作为参数) int swap(int &...&a = b; return 0; } (引用作为返回值) Type + & + 函数名 (1)以引用返回函数值,定义函数时需要在函数名前加&; (2)用引用返回一个函数值最大好处是,在内存不产生被返回值副本...,不能通过引用对目标变量值进行修改,从而使引用目标成为const,达到了引用安全性。   ...( )和"hello world"串都会产生一个临时对象,而在C++,这些临时对象都是const类型

90740

c++入门到进阶--引用与常量

故:对引用地址,就是对目标变量求地址引用本身不是对象所以不能定义引用引用。...char dworld[80]; demo>>dworld;//文件读取一个单词 demo.getline(dworld,80);//文件读取一行 string line; getline(demo...字符串流stringstream是 C++ 提供一个字符串流(stream),和iostream、fstream有类似的操作方式 istringstream string读取数据 定义 istringstream...②地址传递 地址传递与值传递不同在于,它把实参存储地址传送给形参,使得形参指针和实参指针指向同一块地址。因此,被调用函数对形参指针所指向地址内容任何改变都会影响到实参。...2.函数返回值 概念:执行函数体程序段,最后获取值并返回给主调函数,函数返回值只能通过return 关键字进行返回 格式:return 表达式;/ return (表达式); 返回值类型要与返回值相同

74420

再论C++const和引用

(1)指针是一个常量: 值为一个内存地址,不需要初始化,可以保存不同地址 通过指针可以访问对应内存地址值 指针可以被const修饰成为常量或者只读变量 (2)引用只是一个变量新名字: 对引用操作...(赋值、取地址等)都会传递到代表变量上 const引用使其代表变量具有只读属性 引用必须在定义时初始化,之后无法代表其它变量 (3)使用c++语言角度来看: 引用与指针没有任何关系 引用是变量新名字...,操作引用就是操作对应变量 (4)c++编译器角度来看: 为了支持新概念"引用"必须要一个有效解决方案 在编译器内部,使用指针常量来实现"引用" 因此"引用"在定义时必须初始化 (5)在工程项目开发...;error: declaration of ‘array’ as array of references;C++ 天生要支持 C 语言,C 语言中数组每个元素在内存是顺序存放地址是递增,所以在...C++ 也要兼容这个特性,而在 C++ 唯有引用数组破快了这个特性,所以说 C++ 不支持引用数组;&array[1] - &array[0] !

39910

C++变量引用 | 使用变量引用

C++变量引用 C++可以对一个数据可以使用引用引用C++对C语言一个重要扩充,引用是一种新变量类型, 它作用是为一个变量起一个别名。...,即change是temp别名,经过上述声明后,change和temp作用相同,都表示同一变量,&是引用声明符,并不代表地址,读者不要理解为把temp值赋给change地址。...声明变量change为引用类型,并不需要另外开辟内存单元来存放change值。change和temp占内存同一个存储单元,它们具有同一地址。...在C++,声明一个引用类型变量时,必须同时使之初始化,即声明它代表哪一个变量,在声明变量change是变量temp引用后,在它们所在函数执行期间,该引用类型变量change始终与其代表变量temp...经典案例:C++使用变量引用

2.3K2219

C++对象成员引用 | 对象成员引用

C++通过对象名和成员运算符访问对象成员 C++不仅可以在类外引用对象公用数据成员,还可以调用对象公用成员函数,但同样必须指出对象名,应该注意所访问成员是公用还是私有的,只能访问public...C++通过指向对象指针访问对象成员 C++可以通过指针引用结构体成员,用指针访 问对象成员方法与此类似。...;//定义对象time和指针变量point  p=&time; //使point指向对象time  couthout; //输出point指向对象成员hour C++通过对象引用变量来访问对象成员...在C++,如果为一个对象定义了一个引用变量,它们是共占同一段存储单元,实际上它们是同一个对象,只是用不同名字表示而已,因此完全可以通过引用变量来访问对象成员。 ...,就给小林点个赞叭,这样小林也有更新下去动力,跪谢各位父老乡亲啦~ C++对象成员引用 | 对象成员引用 更多案例可以go公众号:C语言入门到精通

2K64
领券