读书人

i++++不合法为什么++++i就合法?分不

发布时间: 2012-03-05 11:54:02 作者: rapoo

i++++不合法,为什么++++i就合法??分不多了...
1> i++++表示什么意思?
2> ++++i表示什么意思?

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


不是死抠语法,但是想知道什么意思,什么运算顺序。


[解决办法]
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++)++,有意义吗?


[解决办法]
左右值的问题
i++得到是右值,右值是常量,不能做运算。
++i得到是左值,左值是变量,可以做运算。

道理很简单,怎么这么多争论呢?
[解决办法]
++的结合性为右结合,所以++++i合法,而i++++不合法,如果改为(i++)++就合法了
建议你不要去管这些了,在日常工作中不会用到这样的,自己写代码是为了工作,不是为了消耗时间!!

读书人网 >C语言

热点推荐