您的位置:程序门 -> c/c++ ->



i++++不合法,为什么++++i就合法??分不多了...


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


i++++不合法,为什么++++i就合法??分不多了...[已结贴,结贴人:anank]
发表于:2007-05-04 13:25:54 楼主
1>   i++++表示什么意思?
2>   ++++i表示什么意思?

int   main()
{
int   i   =   0   ;
cout   < <   ++++i   < <   endl   ; //   2
cout   < <   i++++   < <   endl   ; //   编译错误!
return   0   ;
}


不是死抠语法,但是想知道什么意思,什么运算顺序。
发表于:2007-05-04 13:42:051楼 得分:0
日经帖,在别人的帖子里找答案去
发表于:2007-05-04 14:02:092楼 得分:0
i++++编译不过是因为首先进行i++,而后一个i++的操作数是前一个i++,这是不允许的
至于前一个我就不懂了,
不知道对不对,请高手指教
发表于:2007-05-04 14:07:413楼 得分:0
这样解释可能更好一些,++的结合性为右结合,所以++++i合法,而i++++不合法,如果改为(i++)++就合法了
发表于:2007-05-04 14:09:594楼 得分:0
++++i   按贪心法算,(++)(++)i,都是左值返回
i++++   。。。。。。i(++)(++),第一个i++返回一个临时无名对象值,无法构成l值
发表于:2007-05-04 14:10:355楼 得分:0
这样解释也不对,刚才试了一下,编译不过
应该从后缀++的特点出发解释,因为后缀++是有延迟的
发表于:2007-05-04 14:12:246楼 得分:0
哦,有点明白了
发表于:2007-05-05 10:17:027楼 得分:0
1>   ++++i   按贪心法算,(++)(++)i,都是左值返回
2>   i++++   。。。。。。i(++)(++),第一个i++返回一个临时无名对象值,无法构成l值
------------------
问题:
        1>   在2>   中   那个是“第一个i++”,结合顺序是自右向左还是自左向右?
        2>   如果是自右向左,(++)(++)i,可以解释,但是i(++)(++)怎么解释?
        3>   为什么++设计的允许两个前向++,但是就不允许后向++呢?
        ----------
        请大家详细的给解释一下。。。

发表于:2007-05-05 11:35:588楼 得分:0
直接建议你不要去管这些东东了,真正的商业代码里没有一行这样的代码。
发表于:2007-05-05 14:04:239楼 得分:2
foolmouse123()   (   )   信誉:100         blog       加为好友     2007-05-05   11:35:58     得分:   0    
 
 
      直接建议你不要去管这些东东了,真正的商业代码里没有一行这样的代码。
   
 
//这也是考你对c++体系的熟悉,而不是一句   “真正的商业代码里没有一行这样的代码。”就跳过的

1>   在2>   中   那个是“第一个i++”,结合顺序是自右向左还是自左向右?
//这个问题不大,   视编译器而定,因为都是同级的嘛

  2>   如果是自右向左,(++)(++)i,可以解释,但是i(++)(++)怎么解释?
//可以这样看啊。   ++(++i),

  3>   为什么++设计的允许两个前向++,但是就不允许后向++呢?
  注意,后加返回的是临时的无名对象
比如我们写个函数
int   get(){}
调用时可以
int   a=get();
也可以空放在那里
get();//但这是有个值返回的,过了;号就被分解掉

i++;你把他看成get()产生一个无名对象值,接着对这个无名对象再++,(i++)++,有意义吗?

发表于:2007-05-05 14:22:1410楼 得分:0
这就是结合的问题了。
发表于:2007-05-05 14:43:1511楼 得分:0
看到这个东西想起了以前看到的一道题,以下式子哪个是错的?
(a)a   +=   (a++);   (b)   a   +=   (++a)   ;(c)   (a++)   +=   a;(d)   (++a)   +=   (a++);

答案是c,也是因为左值不能赋值;
发表于:2007-05-06 16:25:4412楼 得分:0
这是关于结合性的问题。但是具体我也有点不清楚了。
好长时间没有复习了
发表于:2007-05-07 17:41:0113楼 得分:0
大概是因为i++返回的是r-value,r-value是不能++的,所以i++++不对。
而++i返回的值可以解释成l-value的,故++++i可以编译通过。

想完全弄明白,看看c++对象模型吧。
发表于:2007-05-08 11:55:1014楼 得分:0
就是左值与右值的问题了。
发表于:2007-05-08 20:13:0115楼 得分:0
i++   返回的是一个临时变量,可以认为是const   int所以就不能再++了
++i   返回的是i,一个int型的变量,所以就还能++
发表于:2007-05-08 20:52:5016楼 得分:0
i++产生一个临时对象
它不能做左值
发表于:2007-05-08 21:04:1317楼 得分:0
看到这个东西想起了以前看到的一道题,以下式子哪个是错的?
(a)a   +=   (a++);   (b)   a   +=   (++a)   ;(c)   (a++)   +=   a;(d)   (++a)   +=   (a++);

答案是c,也是因为左值不能赋值;
------------------------------------------------
这个   c   和   d都测试报错啊.....
发表于:2007-05-08 21:20:5218楼 得分:0
c和d   都应该错误
因为a++做不了左值
发表于:2007-05-08 21:37:4319楼 得分:2
左右值的问题
i++得到是右值,右值是常量,不能做运算。
++i得到是左值,左值是变量,可以做运算。

道理很简单,怎么这么多争论呢?
发表于:2007-05-09 22:59:4820楼 得分:1
++的结合性为右结合,所以++++i合法,而i++++不合法,如果改为(i++)++就合法了
      建议你不要去管这些了,在日常工作中不会用到这样的,自己写代码是为了工作,不是为了消耗时间!!


快速检索

最新资讯
热门点击