| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1059 人关注过本帖
标题:被a++和++a搞晕乎乎的童鞋们可以进来下啊~哈哈,顶顶~
取消只看楼主 加入收藏
xinyukkkk028
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-5-10
收藏
 问题点数:0 回复次数:7 
被a++和++a搞晕乎乎的童鞋们可以进来下啊~哈哈,顶顶~
之前很多朋友都问了我这个问题,处于方便,我就一次这个帖子解答了吧。。。其实很简单,因为每一个表达式都有一个返回值。
比如c++或者++c。这些都是一个表达式,而自增(或者自减)运算符的位置的不同,表达式的返回类型就不同。
前置的运算符返回的是对该对象的一个引用。就是说,返回的是一个地址,所以可以做连续运算,比如++++c这样的表达式是合法的。
但是后置运算法不一样。他返回的只是一个临时副本,就是说,返回的只是一个值而并没有一个修改权限(可以把它理解成为一个constant的值)
所以说c++++这样的表达式是不合法的,一般用的gcc或者vc编译器都会报错的吧。而且准确的说,后置运算符++是一个二元运算符。第一个参数是你做操作的对象本身,第二个参数实际上是编译器自动传入的一个int,而且这个值一般为0。就是说c++这个表达式的完整形式应该是 operator ++(int c,int),第二个参数实际上没有什么用处,只是为了和前置运算符区分以便重载而已。
总之,明白了前置返回的是引用而后置返回的是值的话,其实很好理解了。
这就是为什么a=(++c)+(++c);c=0;最后的a=4而不是3或者2或者别的什么答案了。你们明白咯吗
搜索更多相关主题的帖子: 表达式 朋友 
2011-05-11 00:28
xinyukkkk028
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-5-10
收藏
得分:0 
木有人顶啊,木有人回帖啊。。。感觉白打字了啊
2011-05-11 00:32
xinyukkkk028
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-5-10
收藏
得分:0 
回复 6楼 pangding
回复6楼,a=(++c)+(++c)这个题我是自己试验过的,不管用GCC还是VC都是4.谢谢提出批评意见,对于左值右值我前部分已经有说明咯,也许是您忽略了,前置返回引用,引用当然是左值,后置返回值,当然是右值,只是说法不一样而已,嘿嘿,以后希望大家也能互相切磋切磋。我只是一个大一的学生。。这些只是我自己的经验。。只是有些学弟在问所以我就一次性把我的观点打了出来,至于您提到的那个后置传入默认参数的问题,这个不是我的说法。请参照机械工业出版社出版的《More Effective C++》由 Scott Meyers著,刘晓伟译的。第二章运算符里面有提到这个说法。。
2011-05-12 14:58
xinyukkkk028
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-5-10
收藏
得分:0 
以下是引用rjsp在2011-5-11 12:55:40的发言:

T& operator++ ()
{
    t += 1;
    return t;
}

const T& operator++( int )
{
    T temp = t;
    t += 1;
    return temp;
}


补充一点,这2个式子是正确的,这个就是解释了为什么C++返回的是自增前的值而如果用++c的取值是增加后的值了,希望能够使不是很明白的同学豁然开朗。
2011-05-12 15:00
xinyukkkk028
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-5-10
收藏
得分:0 
再祝今年马上高考的学弟学妹们高考成功!!!1热爱C++的人啊!高考伤不起啊!
2011-05-12 15:01
xinyukkkk028
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-5-10
收藏
得分:0 
回复 10楼 pangding
请问您为什么要自己写一个int类呢?我说的就是GCC原本的int啊。。。。
2011-05-30 11:55
xinyukkkk028
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-5-10
收藏
得分:0 
回复 12楼 pangding
饿。。这倒是没有想到过。谢谢老师的启发。以后我想问题一定会更全面的~(ˇˍˇ) 想~
2011-06-12 19:48
xinyukkkk028
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-5-10
收藏
得分:0 
回复 14楼 obeey
顶楼上,对的,传入引用的话就不可能出现奇数了。
2011-06-14 01:12
快速回复:被a++和++a搞晕乎乎的童鞋们可以进来下啊~哈哈,顶顶~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021262 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved