increment/decrement/dereference操作符
标题以上分别对于++/--/*
#include <iostream>
#include <cstddef> using namespace std; class INT {
friend ostream& operator<<(ostream& os, const INT& i); private:
int m_i; public:
INT(int i) :
m_i(i) {
}
//前缀
INT& operator++() {
cout << "++i" << endl;
++(this->m_i);
return *this;
}
//后缀
const INT operator++(int) {
//const的作用是防止i++++
//i++++=i.operator++(0).operator++(0)
//第二次++操作的完全就是第一次的临时变量
//而且int也不允许这样写
/*<html>https://blog.csdn.net/piaopiaohu123/article/details/7333771</html>*/
cout << "i++" << endl;
INT temp = *this;
++(*this);
return temp;
} //前缀
INT& operator--() {
cout << "--i" << endl;
--(this->m_i);
return *this;
} //后缀
const INT operator--(int) {
cout << "i--" << endl;
INT temp = *this;
++(*this);
return temp;
} int & operator*() const {
return (int&) m_i;
//以上转换操作告诉编译器,你确实要将const int转为non-const lvalue
//如果没有这样明白地转型,有些编译器会给你警告,有些更严格的编译器会视为错误
} //写在内部只能有一个参数,另一个参数是this
// ostream& operator<<(ostream& os, const INT& i) {
// os << '[' << i.m_i << ']';
// return os;
// }
};
ostream& operator<<(ostream& os, const INT& i) {
os << '[' << i.m_i << ']';
return os;
} void A(int &a) { } int main(int argc, char **argv) {
INT I();
// cout << I++ << endl;
//测试后缀的临时变量的效果
//int i=5;
//A(i++);//error:说明i++返回的也是临时变量
//A(++i);//可以
/*
* void A(const int &a)
* 都可以
*/ //测试operator*()返回值的引用效果
cout << ++(*I) << endl; //
cout << I << endl; //[6]
int &a = *I;
cout << ++a << endl; //
cout << I << endl; //[7]
int b = *I;
cout << ++b << endl; //
cout << I << endl; //[7] // cout << ++I << endl;
// cout << I << endl;
return ;
}
increment/decrement/dereference操作符的更多相关文章
- STL——increment/decrement/dereference操作符
increment/dereference操作符在迭代器的实现上占有非常重要的地位,因为任何一个迭代器都必须实现出前进(increment,operator++)和取值(dereference,ope ...
- increment/decrement/dereference
#include <vector> #include <deque> #include <algorithm> #include <iostream> ...
- ITEM M6 自增(INCREMENT)、自减(DECREMENT)操作符前缀形式与后缀形式的区别
前缀自增 UPInt & UPint::operator++() { *this+=1; return *this; } 后缀自增 const UPInt & UPint::opera ...
- 【M6】区别increment/decrement操作符的前置(prefix)和后置(postfix)形式
1.考虑++(--的情况是一样的),前置是累加然后取出,后置是取出然后累加. 2.重载方法根据形参表的不同区分,问题来了,前置和后置形式都没有形参,因此没法区分.怎么办? 对于后置增加一个形参int, ...
- [atAGC049E]Increment Decrement
由于每一个操作的逆操作都存在,可以看作将$a_{i}$全部变为0的代价 先考虑第一个问题,即对于确定的$a_{i}$如何处理 如果仅能用第2种操作,定义点$i$的代价为以$i$为左端点或以$i-1$为 ...
- noobSTL-1-配置器-1
noobSTL-1-配置器-1 1.要点分析 1.1 可能让你困惑的C++语法 组态 即配置. 临时对象 一种无名对象.有时候会刻意地制造临时对象. 静态常量整数成员在class内部直接初始化 con ...
- noobSTL-1-配置器-0
noobSTL-1-配置器-0 0.前言 STL的配置器(allocator),也叫内存分配器,负责空间配置与管理,简单地说,就是负责管理内存的. 从实现的角度来看,配置器是一个实现了动态空间配置.空 ...
- 《STL源码剖析》学习半生记:第一章小结与反思
不学STL,无以立.--陈轶阳 从1.1节到1.8节大部分都是从各方面介绍STL, 包括历史之类的(大致上是这样,因为实在看不下去我就直接略到了1.9节(其实还有一点1.8.3的内容)). 第一章里比 ...
- C++ 重载操作符与转换
<C++ Primer 4th>读书笔记 重载操作符是具有特殊名称的函数:保留字 operator 后接需定义的操作符号. Sales_item operator+(const Sales ...
随机推荐
- wireshark抓包获取好友ip,定位所在位置
1.打开wireshark 2.按Ctrl + F 键进行搜索 1,选择搜索 “字符串”; 2,选择搜索 “分组详情”; 3,填写搜索数据 “020048″; 3.对qq好友发起语言或视频通话(需要对 ...
- java & jdk
java & jdk JDK 下载太慢 & java 12 https://download.oracle.com/otn-pub/java/jdk/12.0.1+12/69cfe15 ...
- python web需要了解哪些
1. socket.tcp/ip.http(cookie.session.token).https.ssl 2. wsgi:https://www.python.org/dev/peps/pep-33 ...
- ABP 番外篇-菜单
public class LearningMpaAbpNavigationProvider : NavigationProvider { public override void SetNavigat ...
- 三、安装MyCat-Web
一.下载和解压MyCat-web http://dl.mycat.io/mycat-web-1.0/ wget http://dl.mycat.io/mycat-web-1.0/Mycat-web-1 ...
- Python——Label控件说明
Anchor : 标签中文本的位置: background(bg)foreground(fg) :背景色:前景色: borderwidth(bd) :边框宽度: width .height ...
- 当考虑到并发问题时候,我们需要将给表插入id的代码挪到service中,目的是将其放到一个事务中,保准事务的一致性
- Ubuntu开发用新机安装流程
1.SSH安装 Ubuntu缺省已安装客户端,此处安装服务端 sudo apt-get install openssh-server 确认sshserver是否启动 netstat -tlp | gr ...
- shiro注解和标签
Controller中注解: @RequiresAuthentication @RequiresGuest @RequiresPermissions("account:create" ...
- BZOJ1398Vijos1382寻找主人 Necklace——最小表示法
题目描述 给定两个项链的表示,判断他们是否可能是一条项链. 输入 输入文件只有两行,每行一个由0至9组成的字符串,描述一个项链的表示(保证项链的长度是相等的). 输出 如果两条项链不可能同构,那么输出 ...