运算符*, 前缀++,后缀++

本文详细解析了C/C++中前缀和后缀++运算符的区别及使用场景,探讨了它们在代码风格、性能表现上的差异,并通过实例说明了如何正确选择使用前缀或后缀++。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于刚学习C或C++语言来说,++运算符可谓是臭名昭著。大家在学的时候都知道前缀++就是
先加1再使用,而后缀++就是先使用后再加一。例如:
int i = 0;
int j = 0;
int k = 0;
j = i++;
k = ++i;
那么j现在的值还是0,而k的值是2,i现在本身也是2,这应该没什么好说的,很简单,如果要是笔试的时候出的都是这样的题那该多好啊。看下面的
int i = 1;
int j = 0;
int k = 0;
k = i++ + ++i + i++ + j++;
//k = (i++) + (++i) + (i++) + (j++);这个与上面效果一样,注意++运算符的优先级高于双目+,而和单目+一样。
那k呢?嘿嘿...,先自己算算,然后自己写个小程序看看,对不对自己就知道了。
作为一个程序员我想他一辈子也不会用上这样的代码,除非为了装B。原因有:
1.这样的程序风格极差,好的风格是代码书写美观(主要是格式),逻辑清楚符合人们(指程序员)的思维习惯。
为了极尽的榨取C/C++的性能,有时代码进行了优化,使用了一些不是很常用的语言特性,这个就除外。
2.像上面这种形式的代码还存在移植性问题,也就是在不同的环境(如编译器),结果可能是不同的。
不过中国人才多,而且都是牛人,水平都差不多,为了公平,所以这种笔试题就屡试不爽了。(这就和仍骰子差不多,凭运气哈)
初学者时不时就在大名顶顶的优快云论坛发贴求救这种题,真是可笑至极。
说实在的我也有一段时间搞这个问题是不亦乐乎,想起来挺sb,不过回头一想,这也是有意义的,错误给人的印象总是那么深刻,要在不断失败中寻求经验。
对于上面的题,其实我现在看都不看一眼,去想这样的问题没有意义。

记住:
使用前缀++和使用后缀++都可以达到同样的效果时,我们应该用前缀++,这是因为后缀++会产生临时对象,性能不如前缀++,特别是自定义
的大型对象就更应该尽量使用前缀++了。
哦,还有*没有说,举个例子:
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
for (vector<int>::const_iterator iter = vec.begin(); iter != vec.end(); )
{
  cout << *iter++ << endl;
}
注意++的优先级高于*。
像这样的(*ptr++)形式的C/C++代码到处可见,这样的用法也很经典,虽然对于初学者不是那么容易接收(倾向于*iter;++iter),但是在老
手那里经常用,而且特别喜欢这样用,毕竟写一行代码比写两行快。这两种方法没有孰优孰劣,都是可以的。不过还是向业界的老手靠拢比较好,
这样你写的代码更容易得到认可。
我已经解释了*iter++和*iter;++iter;效果一样,*(iter++)如前者。
就说到这吧,混了不少加班时间,这个可是在公司写的,别人还以为我变勤奋了呢。
C/C++的东西蛮多,给我消磨时间的机会也多,我要好好发挥!
过段时间就说说MFC编程,主要是控件的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值