c++中有些重载运算符为什么要返回引用?
来源:互联网 发布:开淘宝服装店要多少钱 编辑:程序博客网 时间:2024/06/05 09:44
1. c++中有些重载运算符为什么要返回引用,单单为了避免析构再构造吗?
不是。「有些」重载运算符要返回的引用,是为了返回它本身。如
不是。「有些」重载运算符要返回的引用,是为了返回它本身。如
class TestClass { private: int number; public: TestClass& operator+=(const TestClass& rhs) { // 重载函数返回引用 number += rhs.number; return *this; }};
上例是一个C++的不完整的简单类,其中+=运算符,它本身的意义是「自增,并返回自增后的值」,所以就要返回自己,而不是返回一个自己的拷贝。
2. 在此情况下,返回值为NULL或类似情况怎么办?
引用不可为空,楼主所说的情况不存在。
#include <iostream>using namespace std;class StupidClass { int flag; public: StupidClass(int flag): flag(flag) { cout << "Constructor " << flag << endl; } ~StupidClass() { cout << "Destructor " << flag << endl; } StupidClass(const StupidClass& rhs) { cout << "Copy Constructor *this=" << flag << " rhs=" << rhs.flag << endl; } StupidClass& operator=(const StupidClass& rhs) { cout << "Operator = *this=" << flag << " rhs=" << rhs.flag << endl; return *this; } StupidClass& operator+=(const StupidClass& rhs) { cout << "Operator += *this=" << flag << " rhs=" << rhs.flag << endl; flag += rhs.flag; return *this; }};int main() { StupidClass var1(1), var2(2); StupidClass var3 = var1 += var2; return 0;}
Constructor 1Constructor 2Operator += *this=1 rhs=2Copy Constructor *this=3 rhs=3Destructor 3Destructor 2Destructor 3
如果把var3的类型改成StupidClass&,那么输出就变成
Constructor 1Constructor 2Operator += *this=1 rhs=2Destructor 2Destructor 1
那么var3就是var1的引用了。
4. 据说返回局部对象的引用非常危险,请问返回引用到底有什么作用?,难道输入输出流返回的不是局部对象的引用?输入输出流重载的是 << 和 >> 运算符,一般是这样写的
ostream& operator<<(ostream& os, const TestClass& rhs) { os << rhs.number; return os;}
int& func() { int dummy = 1; return dummy;}
阅读全文
0 0
- c++中有些重载运算符为什么要返回引用?
- c++中有些重载运算符为什么要返回引用
- C++赋值运算符重载,为什么要返回引用?
- 赋值运算符重载为什么要返回引用
- c++中重载输出操作符,为什么要返回引用
- 友元 重载<<运算符为什么要返回ostream的引用?
- 为什么有时候C++运算符重载要返回引用,附对象生存周期
- 为什么赋值运算符要返回引用?
- 为什么赋值运算符要返回引用?
- 为什么运算符重载返回值使用&?
- c++赋值运算符为什么要返回引用?
- /c++赋值运算符为什么要返回引用
- C++运算符重载,+-*/的重载,返回值为什么是对象而不是对象的引用?而流操作符<< 和 >> 却返回的是引用?
- C++运算符重载,+-*/的重载,返回值为什么是对象而不是对象的引用?而流操作符<< 和 >> 却返回的是引用?
- C++学习记录19--运算符重载为什么要使用引用(=)
- c++ 重载 = 为什么返回引用类型
- 重载运算符时的参数和返回类型要用引用的说明
- C++中赋值操作符为什么要返回引用类型
- java实现延迟
- JAVA数组的认识
- java核心技术卷1第5章学习心得
- spring boot实战之JSP
- spring security spring boot
- c++中有些重载运算符为什么要返回引用?
- jQ 常用的操作属性的方法
- 1.2.3实例变量与线程安全(不共享数据的情况)
- Android 开源组件和第三方库汇总
- 感兴趣的Github
- Android入门图片缓存(傻瓜式)
- 关于linux下面sh文件执行不了 找不到目录的原因
- Jersey写Restful接口获取参数的问题
- PromiseKit 使用