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 ...
随机推荐
- python SMTP 发送邮件 阿里企业邮箱、163邮箱 及535错误
class SendEmail(object): def __init__(self, type, to_addr): self.to_addr = to_addr self.sys_date = t ...
- 在 Web 页面使用 VLC 插件播放 m3u8 视频流 (360 极速模式)
1. 背景 公司有个旧项目需要添加在线播放 m3u8 视频流,但是该流不知道什么原因使用 Video.js 或 hls.js 均无法播放,最后找到解决方案可使用 VLC 插件播放(360 极速模式下) ...
- cuda编程视频资料
胡文美教授 http://www.gpuworld.cn/article/show/463.html
- CF980E
题面 Panel 国将举办名为数字游戏的年度表演.每个省派出一名选手. 国家有 n 个编号从 1 到 n 的省,每个省刚好有一条路径将其与其他省相连.第 i 个省出来的代表有 2^i 名粉丝. 今年, ...
- kubernetes增加污点,达到pod是否能在做节点运行
master node参与工作负载 (只在主节点执行)使用kubeadm初始化的集群,出于安全考虑Pod不会被调度到Master Node上,也就是说Master Node不参与工作负载. 这里搭建的 ...
- C# 电脑上提示未知发布者
参考6楼:http://tieba.baidu.com/p/5767451198?pid=120504172126&cid=120504203560#120504203560 解决方案:mak ...
- alter table,复制, 单表查询
修改表 语法:1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增加字段 ALTER TABLE 表名 ...
- HDU - 3917(朴素LIS + 最大流)
题意: 求出所有的最长上升子序列的个数且每个元素只能用一次 解析: 呵...呵...呵..呵..emm... 再见 我死了...wa了15发之后...原来不能用~ 要用 != EOF 这题算水题吧. ...
- CCF WC2017 & THU WC2017 旅游记
day-x 真·旅游 去了杭州的一些景点,打了几场练习赛. day0 报到日 领资料.入住,中午在食堂吃饭,感觉做的挺好的,和二高食堂差不多.晚上还有开幕式. day1~day4 白天讲课,晚上营员交 ...
- bzoj 3673 可持久化并查集 by zky
Description n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的状态(查询算作操作)3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0<n ...