社区
C语言
帖子详情
大家来讨论下吧:)
darcymei
2003-10-18 04:51:16
看了前置++和后置++的运算符重载后,忽然想起以前老师说的话,能用++a的地方不要用a++,两者效率的确有差别阿:)同时也想到了另外一个问题,像后置++这种返回实值的函数,他们的返回值什么时候被销毁呢!个人认为表达式结束后就会,但想不出用什么代码来验证。请高手指点....
还有就是这里高手多多,能否请大家谈谈好的代码习惯(像写char a;int b;而不要int b;char a;)之类的。分给的少,还请见谅:)
...全文
59
23
打赏
收藏
大家来讨论下吧:)
看了前置++和后置++的运算符重载后,忽然想起以前老师说的话,能用++a的地方不要用a++,两者效率的确有差别阿:)同时也想到了另外一个问题,像后置++这种返回实值的函数,他们的返回值什么时候被销毁呢!个人认为表达式结束后就会,但想不出用什么代码来验证。请高手指点.... 还有就是这里高手多多,能否请大家谈谈好的代码习惯(像写char a;int b;而不要int b;char a;)之类的。分给的少,还请见谅:)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sharkhuang
2003-10-19
打赏
举报
回复
看看more efect c++就ok
bosedom
2003-10-19
打赏
举报
回复
楼主的这个问题真是好啊!
playboyxp
2003-10-19
打赏
举报
回复
++a的地方不要用a++不是效率得问题
这是由于不同编译器得不同处理
有的是从左向右
有的是从右向左得
是否被释放要看他是什么样得变量了
如果是全局得则要到程序结束才会释放
局部得是再函数结束后释放
leyt
2003-10-19
打赏
举报
回复
学习中
killme6115
2003-10-19
打赏
举报
回复
to nmgpy(nmgpy) ( )
前置
friend 类名 &operator++(类名 &)
后置
friend 类名 operator++(类名 &,int =0)
Wolf0403
2003-10-19
打赏
举报
回复
代码来自 More Effective C++
条款六:自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别
Wolf0403
2003-10-19
打赏
举报
回复
// 前缀形式:增加然后取回值
UPInt& UPInt::operator++()
{
*this += 1; // 增加
return *this; // 取回值
}
// 后缀形式:取值然后自增
const UPInt UPInt::operator++(int)
{
UPInt oldValue = *this; // 取回值
++(*this); // 增加
return oldValue; // 返回被取回的值。
//这个函数结束之后,oldValue 如果没有被赋值就被析构了。
}
darcymei
2003-10-19
打赏
举报
回复
谢谢各位的指导,effective正在看ing,的确有很多收获:)
发这贴也是想看看大家还有没有好的代码优化方法,希望高手不吝赐教,让我们这些菜鸟多多学习:)
darcymei
2003-10-19
打赏
举报
回复
to Jinhao(辣子鸡丁)
后置++产生的临时对象是在栈里的,只要当退出了函数operator++(int),这个对象就自动销毁了
有点不解
像a++*c这样的表达式,++返回的值必然在函数operator++(int)后依然存在.他们是什么时候被销毁呢?在整个表达式结束后?那编译器是如何判断的呢(我没学过编译原理,希望高手指点).
cgsw12345
2003-10-19
打赏
举报
回复
樓主,書還是要看的,這樣問題,在書中和標準庫的代碼中到處都有體現的。
Beover1984
2003-10-18
打赏
举报
回复
UP一下,学习中
kxw
2003-10-18
打赏
举报
回复
Jinhao(辣子鸡丁) :写的非常好
Jinhao
2003-10-18
打赏
举报
回复
下面的情况是++a和a++是没区别的(对进行了优化的编译器而言)
1,
int main()
{
++a;
a++;
}
2,
for(int a=0;a<10;a++)
for(int a=0;a<10;++a)
等等...
------------------------------------------------------------------
像后置++这种返回实值的函数,他们的返回值什么时候被销毁呢?
后置++产生的临时对象是在栈里的,只要当退出了函数operator++(int),这个对象就自动销毁了
deerlamp
2003-10-18
打赏
举报
回复
比如
main()函数, 最好用
int main()
{……
return 0;}
不要用 void main(){}
Wolf0403
2003-10-18
打赏
举报
回复
记得哪里看过,至少在单独的语句中,基本类型(int 为例)的前、后置 ++ 的汇编基本没有区别。
重载后置 ++:
ReturnType Class::operator++(int)
int 就是个标志,不需要参数变量。
林锐那个书,看看就 OK,不要当圣经。代码是给人看的,能方便的读懂就 OK。
cxjddd
2003-10-18
打赏
举报
回复
我觉得对于内部类型来说,a++ 与 ++a 的区别不是太大,编译器应该能够优化得很好。
主要是重载的 a++ 与 ++a,由于 a++ 的语义是 temp=a,++a,temp,所以 a++ 的效率要低。
对多数 iterator 来说,++a 的效率明显要高于 a++。
nmgpy
2003-10-18
打赏
举报
回复
从载操作符应该可以得到验证,但只知道++a如果从载不知道a++如何从载,请各位高手不吝赐教。
zhu1981
2003-10-18
打赏
举报
回复
楼主出言谦逊,
我想一定是好学之人,
单鄙人才疏学浅,
不能给你解难,
请愿量,
望高手能给你解难。
ttlb
2003-10-18
打赏
举报
回复
至于程序编写风格,我觉得不重要,因为当你读完一本经典的C++著作以后,风格估计就和大使差不多了:)
我觉得C++Primer不错。
ttlb
2003-10-18
打赏
举报
回复
++a 返回的是 a 自己,所以作用域一过,就销毁。
a++ 返回临时对象,当前语句执行完就销毁,搂主说的队。
int a = 1;
cout << a++; // 输出1
cout << a; // 输出2,临时对象已经销毁,所以没办法验证
加载更多回复(3)
数据库设计入门经典 C#
同学做的 大家看看 有地方做得不好大家一起
讨论
下吧
今天给大家做个黑防鸽子免杀教程吧 教程很容易
群57956994 刚建的 大家可以在一起
讨论
啊!在个希望 安全中国 可以给个邀请 码 好我也不在废话了 大家直接看我操作就可以了。 呵呵 被杀了因为我在网吧 所以没下什么杀软 只下了个金山 大家可以去测试下! 好看我...
Android Menu半透明效果的开发实例
下面是天天动听半透明Menu的截图,欣赏下吧: 感觉还不错吧?那么如何实现这种半透明Menu效果呢?本文就重点
讨论
并给出这种Menu的具体代码实现过程。 首先分析下实现这种半透明Menu所需做的工作,并进行合理...
管理学课后习题详细的答案
管理学答案,喜欢就下载,很好的,我是经过几天几夜整理的,大家喜欢就下吧,也算是支持我咯,谢谢!!
Linux文件句柄限制总结
网上说什么的也有,你抄我的我抄你的,也是醉了,故自己综合查阅的资料,根据自己的理解和判断以及部分的实践整理下吧,也不敢保证都是对的,如果有比较大的错误,希望看到这篇文章的你提出来,大家共同进步!...
C语言
69,382
社区成员
243,074
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章