C++ 赋值函数为什么返回reference to *this?
赋值操作为什么要返回 reference to *this? 要弄清这个问题之前,先了解函数的返回值类型:返回值类型,返回引用类型
- 返回值类型:返回的是一个对象的副本。
test operator= (const test &t)
{
...
cout << "赋值" << endl;
return *this;
}
- 返回引用类型:返回的是对象本身。
test &operator= (const test &t)
{
...
cout << "赋值" << endl;
return *this;
}
class test
{
public:
test() :i(10)
{
cout << "构造" << endl;
}
~test()
{
}
test(const test &t)
{
this->i = t.i;
cout << "拷贝" << endl;
}
test operator= (const test &t)
{
i = t.i;
cout << "赋值" << endl;
return *this;
}
void setData(int value)
{
i = value;
}
int getData()
{
return i;
}
private:
int i;
};
int _tmain(int argc, _TCHAR* argv[])
{
test a;
test b;
test c;
cout << a.getData() << endl << b.getData() << endl<<c.getData() << endl;
a.setData(20);
c = b= a;
cout << a.getData() << endl << b.getData() << endl << c.getData() << endl;
return 0;
}
 ,可以看出仅仅是在每次赋值完后多了一次拷贝。现在考虑一个情况
,可以看出仅仅是在每次赋值完后多了一次拷贝。现在考虑一个情况 。分析:因为c=b,返回的是一个临时的对象,因此其实最后a赋值给了一个临时变量且多了一次拷贝。
。分析:因为c=b,返回的是一个临时的对象,因此其实最后a赋值给了一个临时变量且多了一次拷贝。 (c=b)=a,对象c被成功赋值,且整个过程少了两次拷贝。
   (c=b)=a,对象c被成功赋值,且整个过程少了两次拷贝。C++ 赋值函数为什么返回reference to *this?的更多相关文章
- 深入理解c++构造函数, 复制构造函数和赋值函数重载(operator=)
		注 以下代码编译及运行环境均为 Xcode 6.4, LLVM 6.1 with GNU++11 support, Mac OS X 10.10.2 调用时机 看例子 // // main.cpp / ... 
- C++:类中的赋值函数
		先来看一个例子: #include<iostream> #include<string> using namespace std; class Student{ public: ... 
- C++函数的返回值——返回引用类型&非引用类型
		函数的返回主要分为以下几种情况: 1.主函数main的返回值: 允许主函数main没有返回值就可结束:可将主函数main返回的值视为状态指示器,返回0表示程序运行成功,其他大部分返回值则表示失败. 2 ... 
- 【转】C/C++ 引用作为函数的返回值
		转自:https://blog.csdn.net/weixin_40539125/article/details/81410008 这篇文章写的很好: 语法:类型 &函数名(形参列表){ 函数 ... 
- getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析
		2013-07-18 21:35:58 getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析. char是字符型数 ... 
- 理解C++中函数的返回
		连续几年的C++程序设计课教学中,学生中总有人要求为他们单独解释函数的返回(return)究竟是什么意思.各种书中都会详讲返回值的问题,而学生们掌握的难点却是在返回至何处执行.本文试图通过对一般函数及 ... 
- python学习之---匿名函数,返回函数,偏函数
		1. 返回函数: 所谓的返回函数,指的是函数作为返回值.高阶函数除了可以接受函数作为参数外,同样可以接受函数作为结果返回.以下是一个可变参数的求和例子,一般求和函数是如此这般定义的: >> ... 
- Python的函数式编程-传入函数、排序算法、函数作为返回值、匿名函数、偏函数、装饰器
		函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ... 
- String的构造函数、析构函数和赋值函数
		编写类String的构造函数.析构函数和赋值函数 已知类String的原型为: class String { public: String(const char *str = NULL); // 普通 ... 
随机推荐
- 钉钉小程序----使用阿里的F2图表
			在钉钉小程序中使用F2的图表遇见很多问题 不能点击或者点击错乱的问题还没有解决,因为我解决不了........................... ------------------------- ... 
- zabbix配置文件解析
			zabbix的配置文件一般有三种:zabbixserver的配置文件zabbix_server.confzabbixproxy的配置文件zabbix_proxy.confzabbix_agentd的配 ... 
- JavaScript - 常用对象相关
			1. String对象 length : 字符串的长度 charAt(index) : 返回指定位置的字符串, 下标从0开始 indexOf(str) : 返回指定的字符串在当前字符串中首次出现的位置 ... 
- Android问题集锦An error occurred while automatically activating bundle com.android.ide.eclipse.adt .
			这是Eclipse的问题,重启之后问题依旧. 在坛子里找到这个办法,果然好用. 命令行到eclipse路径运行:eclipse.exe -clean 
- 段错误 “段错误(segment fault)”、“非法操作,该内存地址不能read/write” 非法指针解引用造成的错误。
			[root@test after_fc_distributed]# ./ffmpeg-linux64-v3.3.1 -i "concat:mymp3tmp/test_0.mp3|mymp3t ... 
- idea社区版+第一个spring boot项目+增删改查+yml修改端口号
			参考:https://www.cnblogs.com/tanlei-sxs/p/9855071.html 中途出现问题时参考了太多 1.下载idea社区版 2.在settings -> Plug ... 
- PKU Campus 2015
			PKU Campus 2015 B 注意到竖着落下不改变列模 4 的结果.问题转化为:模 4 系下,给序列,可选长度为 4 子区间,区间加一,能否让所有元素相等. C.Rabbit's Festiva ... 
- P1417 烹调方案 /// DP(假设 简化公式 排序)
			题目大意: https://www.luogu.org/problemnew/show/P1417 题解 看第一份方法的公式 排序后01背包 #include <bits/stdc++.h> ... 
- VS2017+QT5.12环境配置与动态链接库的生成
			最近需要重新编译一个DLL动态链接库,由于源码中包含了QT代码,所以现在需要配置VS+QT环境. 本人系统环境:Win10 64位 一.安装 Visual Studio 2017软件下载安装教程:ht ... 
- printk函数速率限制
			如果你不小心, 你会发现自己用 printk 产生了上千条消息, 压倒了控制台并且, 可能地, 使系统日志文件溢出. 当使用一个慢速控制台设备(例如, 一个串口), 过量的消息速率也 能拖慢系统或者只 ... 
