首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
返回引用与返回值的区别
2024-10-26
c++中返回对象与返回引用的区别
这几天在做用C++做课程设计,对其返回对象的实现感到迷惑. 通过对汇编代码的分析,可以清楚的看到,直接返回引用和返回对象的区别到底是什么. 分析的程序如下 #include<cstdio> class Node { public: Node(int _num, char *_str): num(_num), str(_str) { } int getInt() { return num; }; void setInt(int n) { num = n; } char* getStr() { r
(C/C++学习)21.C++中返回引用和返回对象以及传引用和传对象问题
说明:在学习和编写C++代码时,经常会遇到这样的问题:一个带返回值的函数,到底应该返回值呢,还是应该返回引用呢:在传递参数的时候,是应该传递参数的引用呢,还是应该传值呢?请看下面代码: void myswap(int &a, int &b) { int temp = a; a = b; b = temp; } 相信上面代码大家经看到,这就是一个常见的交换两个整数值的代码,但如果传递参数里面传的是值而不是引用呢,答案是这样的交换根本没用. 探讨: 1.其实当按引用传递对象的时候,调用函数以及
C++中返回引用和返回值的区别
转自https://www.cnblogs.com/JMLiu/p/7928425.html 一.主要讨论下面两个函数的区别: int& at() { return m_data_; } int at() { return m_data_; } 上面两个函数,第一个返回值是int的引用int&,第二个返回值是int,二者的区别是什么呢? 我们先用一个语句 const int& a = mymay.at(); 来分别调用一次上面两个函数,然后看汇编语言的结果. 反汇编结果: 1 #i
C++函数中返回引用和返回值的区别
一.主要讨论下面两个函数的区别: int& at() { return m_data_; } int at() { return m_data_; } 上面两个函数,第一个返回值是int的引用int&,第二个返回值是int,二者的区别是什么呢? 我们先用一个语句 const int& a = mymay.at(); 来分别调用一次上面两个函数,然后看汇编语言的结果. 反汇编结果: #int& at() #{ # return m_data_; #} 00BB6830 pus
c++中有些重载运算符为什么要返回引用
事实上,我们的重载运算符返回void.返回对象本身.返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值. 那么什么情况下要返回对象的引用呢? 原因有两个: 允许进行连续赋值 防止返回对象(返回对象也可以进行连续赋值)的时候调用拷贝构造函数和析构函数导致不必要的开销,降低赋值运算符等的效率. 对于第二点原因:如果用”值传递“的方式,虽然功能任然正确,但由于return语句要把*this拷贝到保存返回值的外部存储单元之中,增加了不必要的开销,会降低赋值函数的效率
C++返回对象和返回引用
我们发现,在C++中,有些成员函数返回的是对象,而有些函数返回的又是引用. 返回对象和返回引用的最主要的区别就是函数原型和函数头. Car run(const Car &) //返回对象 Car & run(const Car &) //返回引用 返回对象会涉及到生成返回对象的副本.因此,返回对象的时间成本包括了调用复制构造函数来生成副本所需的时间和调用析构函数删除副本所需的时间.返回引用可以节省时间和内存.直接返回对象与按值传递对象类似,他们都生成临时副本.同样,返回
函数返回值string与返回值bool区别------c++程序设计原理与实践(进阶篇)
为什么find_from_addr()和find_subject()如此不同?比如,find_from_addr()返回bool值,而find_subject()返回string.原因在于我们想说明: find_from_addr()应该区分有地址行当内容为空(“”)和无地址行两种不同的情况.对于第一种情况,find_from_addr()返回true(因为找到了地址行)并将s置为空字符串“”(因为地址为空).而对于第二种情况,应该返回false(因为没有地址行). 对于主题为空或者没有主题行的
c++中赋值运算符重载为什么要用引用做返回值?
class string{ public: string(const char *str=NULL); string(const string& str); //copy构造函数的参数为什么是引用呢? 我相信大家都懂的! string& operator=(const string & str); //赋值函数为什么返回值是引用呢? ~string(); }; 如果返回值时, return *this后马上就调用拷贝构造函数. 但是万一由于没有定义拷贝构造函数 ,就会调
fetchone函数和fetchall函数返回值的区别
fetchone函数和fetchall函数返回值的区别 1.fetchone() 返回单个的元组,也就是一条记录(row),如果没有结果,则python返回 None 有结果时,如图: 没结果时,如图: 2.fetchall() 返回多个元组,即返回多个记录(rows),如果没有结果 则返回 () 有返回结果时,如图: 无返回结果时,如图:
C++ 重载运算符返回值 和 返回引用的原因
原因是: +,-,*等返回不了引用,比如+运算符,可以如下重载(为了简单,假设A 只有int x:int y) A operator+(A a,A b) {A sum; sum.x=a.x+b.x; sum.y=a.y+b.y; return sum; } 分析不能用引用的原因: 函数传入了两个参数a,b,并且+只能传入两个参数(c++不允许自己创造运算符),这样就限定了和sum不能作为参数传入,所以sum只能是一个函数里的临时变量,但是临时变量在函数结束时是要销毁的,那么函数调用玩,s
C++返回引用的函数
要以引用返回函数值,则函数定义时的格式如下: 类型标识符&类型名 (形参列表及类型说明) { 函数体 } 用const限定引用的声明方式为: const 类型标识符&引用名=目标变量名: 用这种方式声明的引用不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,保证了 引用的安全性. 注意几点: 要以引用返回函数值,则定义函数时需要在函数名前加上&. 用引用返回一个函数值的最大好处是:在内存中不产生被返回值的副本:而用普通的返回值的方法返回一个函数的函数值时,需要在内
【c++】c++中重载输出操作符,为什么要返回引用
针对:ostream & operator <<(ostream & os, const ClassType &object) 说明几点: 1.第一个形参为对ostream对象的引用,在该对象上将产生输出,ostream为非const,因为写入到流会改变流的状态:该形参是一个引用,因为不能复制ostream对象(在c++中定义的标准输入输出流类istream和ostream,其中拷贝构造函数和赋值操作符函数都被放置在了private部分,且只有声明,没有定义). 2.第
c++赋值运算符为什么要返回引用?
为什么赋值运算符要返回引用?? 因为赋值操作会改变左值,而 + 之类的运算符不会改变操作数,所以说赋值运算符重载要返回引用以用于类似 (a=b)=c 这样的再次对a=b进行写操作的表达式.+ 返回一个临时对象是合情合理的 ,你若返回引用大多数情况下也不会出错或导致某个操作数被意外修改,但这就使(a+b)=c这样的表达式可以出现,这就有点不符合约定了,当然,你也可以让 + 返回一个常引用. 在面向对象程序设计中,对象间的相互拷贝和赋值是经常进行的操作. 如果对象在申明的同时马上进行的初始化操
C# 7.0 新特性4: 返回引用
本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 4. C# 7.0 新特性4: 返回引用 C#早在最初的发行版C# 1.0中(2002年1月),就借鉴并延续了C/C++中指针参数,原生允许将值类型数据的引用(指针)通过标记ref参数的形式,传递到方法体中. 但对于方法内的值类型引用,该如何以引用的方式返回,却一直以来没有一个非常完美的解决方案,
Android——关于Activity跳转的返回(无返回值和有返回值)——有返回值
说明: 跳转页面,并将第一页的Edittext输入的数据通过按钮Button传到第二页用Edittext显示,点击第二页的 返回按钮Button返回第一页(改变第二页的Edittext的内容会传至第一页的Edittext显示) ——有返回值的方式 1.给第一页面Edittext和Button设置id 2.设置Button的点击监听 (1)获取view实例,通过Edittext的id找到Edittext (2)获取内容并转为文本形式 getText().toString() (3)设置Intent
C# 中使用win32函数 GetScrollInfo返回false 返回引用全是零的问题
最近做一个项目要获得ScrollBar的位置,因为.net找不到此类功能,只好用MFC中的函数了,GetScrollPos只返回listview顶部的位置,此时我找到了GetScrollInfo,觉得此函甚好.不成想从网上找到示例代码后,函数执行成功了,但是返回了false,查下msdn,说是没取到信息,然后我又用GetLastError想查看下错误信息,但是返回0,就是没有错误,这就纳闷了. 后来又在网上不停的找,找到pinvoke这个网站,这有比较正规的调用例子http://www.pinv
读书笔记 effective c++ Item 21 当你必须返回一个对象的时候,不要尝试返回引用
1. 问题的提出:要求函数返回对象时,可以返回引用么? 一旦程序员理解了按值传递有可能存在效率问题之后(Item 20),许多人都成了十字军战士,决心清除所有隐藏的按值传递所引起的开销.对纯净的按引用传递(不需要额外的构造或者析构)的追求丝毫没有懈怠,但他们的始终如一会产生致命的错误:它们开始传递指向并不存在的对象的引用.这可不是好事情. 考虑表示有理数的一个类,它包含将两个有理数相乘的函数: class Rational { public: Rational(, // see Item 24
php函数返回引用示例
<?php class Test { public $userCache; public function init() { for($i = 0; $i < 5; $i++) { $user = array( 'name' => "joe$i", 'age' => 23 + $i, ); $this->userCache[] = $user; } } public function displayArray($arr = '') { if( gettyp
C++返回引用的需求
1.重载+=操作符返回*this或者某个参数的引用可以方便链式调用,比如C++流操作就是cout<< a << b << c这样的,就是靠不停返回stream的引用 类似于这样: ostream &operator<<(ostream &os,const String &st) { os<<st.str; return os; } 2.返回类成员变量的引用,最好加const,不破坏类成员的封装性 如下:复制于 C++ 中引
<转>SQL Server返回最后一个标识值的三个函数:IDENT_CURRENT、@@IDENTITY、SCOPE_IDENTITY
MSDN对官方解释:这三个函数都返回最后生成的标识值. 但是,上述每个函数中定义的“最后”的作用域和会话有所不同. 1.IDENT_CURRENT 返回为某个会话和当前作用域中的指定表生成的最新标识值. 如果 IDENT_CURRENT 值为 NULL(因为表从未包含行或已被截断),IDENT_CURRENT 函数将返回种子值. 2.@@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值. 如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL. 如果插
热门专题
h5 读取手机品牌 跳转到应用市场
ubuntu如何强制修改有线网协商100
mysqld install 目录出错
nuc972裸机程序如何启动
在ubuntu中更改postgres密码
metricscollector中能检测资源的是
fedora nvidia-xconfig 后不能开机
nns和ldap数据同步
计算机的 位 用b 还是B 还是 bit的关系
vps安装openvpn
Windows下snmputil安装使用
dataGrid初始化不加载数据
树莓派部署springboot
spring 拦截器、过滤器先后顺序
n个孩子m个苹果如何平均分配,
jpa使用distinct去重
tainuibil11什么意思
使用for循环输出2到100之间的素数
bat 打开谷歌浏览器
vs新建数据SQL连接报错