c++ 自加(自减)运算符--后++或--为什么要返回一个const?
来源:互联网 发布:淘宝欠下贷款怎么协商 编辑:程序博客网 时间:2024/05/29 17:56
c++ 自加(自减)运算符
(1)a++++; /* a++返回的是一个const; */
(2)++++a;
(3)++a++; /* a++返回的是一个const; */
(4)a++=b; /* a++返回的是一个const; */
(5)++a=b;
1,对于a,b为整数等简单类型,则(1,3,4)错误,(2 ,5)正确。所有错误的原因都是因为a++返回的是一个常量而不是变量,在进行(左++)或者(右++)或者(=)操作都是不对的。
2,若a,b为对象时,重载operator++运算符。若想和整数等简单类型一致的话,需要实现
OBJ & operator++(); 与const OBJ operator++(int a);两个重载函数,则和上述的错误正确结果一致。
3 ,若a,b为对象时,重载operator++运算符。若实现 OBJ & operator++(); 与 OBJ operator++(int a);两个重载函数(去掉 const),则上述的所有题目结果都正确。
4,后置式为什么要返回一个const对象?首先返回值必须是一个对象,这是显然的,因为要返回累加前的对象;其次为什么是const对象呢?如果不是const对象会出现什么情况:
违反了后置++的运算语法规则:C语言中不允许两次使用后置++操作符,即下面的操作是非法的:
int i;
i++++; //error! (但++++i是合法的)
如果我们返回不是const对象,意味着下面的操作编译器不会报错:
OBJ c;
c++++; //不会报错,调用的动作如下 c.operator++(0).operator++(0);
5,尽量使用前置式的自增运算符,因为后置式运算符需要申请一个临时对象保存原值,有拷贝构造和析构的代价(对于简单类型,保存一个常量并返回),而前置式没有。
6,前置式自增运算符是先对对象进行修改,然后返回原对象的引用;后置式自增运算符是先申请临时对象保存原对象的值,再在原对象身上进行值修改,返回临时对象。
参考:
1,自增操作符和自减操作符详细参考
2,C++自增运算符的探索
3,区别increment/decrement操作符的前置(prefix)和后置(postfix)形式
- c++ 自加(自减)运算符--后++或--为什么要返回一个const?
- c++ 自加或自减 的运算符重载
- 自加自减运算符
- 自加自减运算符
- Java自加自减运算符
- 自加自减运算符
- 自加运算符
- 自加运算符( ++)
- C语言(自加自减)
- 自加、自减运算符和逗号运算符
- 运算符和自加和自减运算符
- 【C】使用自加(++)和自减(--)运算符时容易出的错误
- C#自加和自减运算符
- 自加/自减运算符的重载
- 运算符重载实现数组自加、自减
- 关于数学运算符的自加和自减
- 指针的自加自减运算(++,--)
- 深度解析自加自减运算 ++ --
- Java技术路线图
- ZOJ3475解题报告
- arcpy的错误处理机制
- canvas 使用细节
- 平板蓝牙测试与移植
- c++ 自加(自减)运算符--后++或--为什么要返回一个const?
- 研究生开题总结
- Mysql 日期函数
- 49 Java socket 2
- AE10.0开发中,要素类出现乱码问题
- create tablespace命令报错的解决方法
- Lua编译错误小结
- jquery取span内容
- 12.6柱状图生成器